iOS开发-小技能

根据tag获取控件

2019-08-13  本文已影响0人  第一梯队利群

自己无聊写个项目,遇到一个问题,那就是我封装了一个方法,这个方法创建了一个view,并在view中添加了label。但是当我在Controller中想要更改这个label的值得时候,我发现我不知道该怎么更改,思考了一下,突然想到了可以根据tag值来获取这个label控件,然后更改其值。

这个就是我封装的那个创建view的方法:

- (UIView *)creatViewWithText:(NSString *)text WithTitle:(NSString *)title{
    UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor whiteColor];
    UILabel *lab = [[UILabel alloc] init];
    lab.text = text;
    lab.textColor = RGBCOLOR(126, 125, 125);
    UILabel *titleLab = [[UILabel alloc] init];
    //---------------------------------------------------------
    //这里就是我后加的tag值,tagNum是一个全局变量,赋予了默认值100
    //因为这个方法需要调用很多次,因此我就让tagNum自增了。
    titleLab.tag = ++tagNum;
    //---------------------------------------------------------
    titleLab.text = title;
    UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow_right_gray"]];
    [view addSubview:lab];
    [view addSubview:img];
    [view addSubview:titleLab];
    [lab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(view.mas_centerY);
        make.left.mas_equalTo(view.mas_left).offset(10);
        make.height.mas_equalTo(20);
    }];
    [img mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(view);
        make.width.height.mas_equalTo(15);
        make.right.mas_equalTo(view.mas_right).offset(-30);
    }];
    [titleLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.height.equalTo(view);
        make.right.mas_equalTo(img.mas_left).offset(-15);
    }];
    return view;
}

接下来我们需要在Controller中获取这个label控件,并更改其text值:

//这里我需要用一个UILabel对象去接收它。
//(UILabel *)是将根据tag值获取到的控件强制转换为UILabel对象。
UILabel *find_label = (UILabel *)[_wantStopView viewWithTag:101];
find_label.text = @"123";
//期初我认为这样无法更改label值,认为这里的赋值只是将label拷贝一份给find_label,所以更改的其实是find_label的text,而没有更改我想要的那个label
//但是这里实际上不是copy一份给find_label,而是将label的地址给了find_label
//所以我们更改find_label也就相当于更改label
上一篇 下一篇

猜你喜欢

热点阅读