我已在UIButtons
的每一行添加了三个UITableViewCell
。
当我选择UIButton
时,它会将颜色更改为黑色。问题是当我向下滚动表格时,那些颜色变化受到了表格中其他单元格按钮的影响。
这个链接也解释了同样的问题 - > UITableviewcell content updating reflects to other cell
我在iOS中找不到这个问题的任何答案。
这是我的cellForRowAtIndexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell"];
UIButton *btn1=[cell viewWithTag:101];
btn1.imageView.contentMode = UIViewContentModeScaleAspectFit;
[btn1 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
btn1.backgroundColor=[UIColor clearColor];
[btn1 setTag:(indexPath.row*3)+1];
UIButton *btn2=[cell viewWithTag:102];
btn2.imageView.contentMode = UIViewContentModeScaleAspectFit;
[btn2 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
btn2.backgroundColor=[UIColor clearColor];
[btn2 setTag:(indexPath.row*3)+2];
UIButton *btn3=[cell viewWithTag:103];
btn3.imageView.contentMode = UIViewContentModeScaleAspectFit;
[btn3 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
btn3.backgroundColor=[UIColor clearColor];
[btn3 setTag:(indexPath.row*3)+3];
rerutn cell;
这是我的按钮动作方法
- (IBAction)btnClicked:(id)sender
{
UIButton *button=(UIButton *)sender;
NSLog(@"tag %ld",(long)button.tag);
if(button.backgroundColor==[UIColor blackColor]){
button.backgroundColor=[UIColor clearColor];
}
else if(button.backgroundColor==[UIColor clearColor]){
button.backgroundColor=[UIColor blackColor];
}
}
在这段代码中没什么特别的。我怎样才能以编程方式解决这个问题..谢谢..!
答案 0 :(得分:1)
替换
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell"];
使用
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell" forIndexPath:indexPath];
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"custCell"];
}
希望它会有所帮助:)
答案 1 :(得分:1)
制作UITableViewCell并添加UIButton并用故事板标记它们。
@interface TblCellCategoryCell:UITableViewCell
@property (weak, nonatomic) IBOutlet UIButton *btn1;
@property (weak, nonatomic) IBOutlet UIButton *btn2;
@property (weak, nonatomic) IBOutlet UIButton *btn3;
@end
答案 2 :(得分:0)
这是因为UITableView
重用了单元格而不是创建新单元格。因此,假设您使用索引2更改单元格的颜色,因此每当UITableView
将重用该单元格时,它将显示先前创建的具有更改颜色按钮的单元格。
针对您的具体问题,您正在重置按钮的标记,以便下次尝试从viewWithTag
获取按钮时,它将不会返回任何按钮或将返回错误的按钮。
答案 3 :(得分:0)
在cellForRowatIndexPth而不是此行
btn1.backgroundColor = [UIColor clearColor];
使用以下代码
if (btn1.isSelected) {
btn1.backgroundColor=[UIColor clearColor];
}
else{
btn1.backgroundColor=[UIColor blackColor];
}
在IBAction中使用
UIButton *button=(UIButton *)sender;
if(button.backgroundColor==[UIColor blackColor]){
button.backgroundColor=[UIColor clearColor];
[button setSelected:YES];
}
else{
button.backgroundColor=[UIColor blackColor];
[button setSelected:NO];
}