您的位置:首页 > 移动开发 > IOS开发

iOS开发中的错误整理,关于用绑定Tag取控件的注意事项,有时候不绑定也是个错!

2016-05-12 22:07 489 查看
如图:红色框中是个自定义的导航工具条titlesView(没有绑定Tag),工具条中有五个按钮(按钮绑定了Tag)以及一个红色的指示器indicatorView(没有绑定Tag),下面的蓝色是可以滚动的scrollView,拖动scrollView,红色指示器会滚到对应按钮的下面,并且按钮呈红色显示.

- (void)setupTitlesView
{
CGFloat width = self.view.width;
CGFloat height = 35;
UIView *titlesView = [[UIView alloc] init];
titlesView.frame = CGRectMake(0, 64, width, height);
titlesView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.6];
titlesView.tag = -1; // scroll滚动完后要通过按钮绑定的tag,得到按钮并设置按钮属性,如果父控件中子控件不止有按钮,别的view的tag不绑定默认也是0,当通过tag==0找按钮的时候,就会报错.所以这里的解决办法是讲其余view绑定别的tag
[self.view addSubview:titlesView];
self.titlesView = titlesView;

// 添加指示器
UIView *indicatorView = [[UIView alloc] init];
indicatorView.backgroundColor = [UIColor redColor];
indicatorView.height = 2;
indicatorView.y = titlesView.height - indicatorView.height;
indicatorView.tag = -2; // 理由同上,不设置也可以,但是要保证这些view的添加要添加到按钮的后面
[titlesView addSubview:indicatorView];
self.indicatorView = indicatorView;

NSArray *items = @[@"全部",@"视频",@"音频",@"图片",@"段子"];

CGFloat btnW = titlesView.width / items.count;
CGFloat btnH = titlesView.height;
CGFloat btnX = 0;
CGFloat btnY = 0;
// 循环添加按钮
for (int i = 0; i < items.count; i++) {
UIButton *btn = [[UIButton alloc] init];
btnX = btnW * i;
btn.frame = CGRectMake(btnX, btnY, btnW, btnH);
[btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateDisabled];
[btn setTitle:items[i] forState:UIControlStateNormal];
btn.titleLabel.font = [UIFont systemFontOfSize:14];
btn.tag = i; // 给按钮添加绑定tag
[btn addTarget:self action:@selector(titleClick:) forControlEvents:UIControlEventTouchUpInside];
[titlesView addSubview:btn];

[btn layoutIfNeeded];

if (i == 0) {
self.selectedButton = btn;
btn.enabled = NO;
// 以后设置尺寸,先设置尺寸,再设置点
self.indicatorView.width = btn.titleLabel.width;
self.indicatorView.centerX = btn.centerX;
}
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: