我在UITableview中有2个按钮。当我在UITableView中选择一个按钮时,也会点击下方的其他按钮。为什么单击一个按钮选择多个UIButtons?
我正在使用故事板,我的代码是:
- (IBAction)yesBtnAction:(id)sender {
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *indexPath = [self.take5table indexPathForCell:clickedCell];
UIButton *yesBTN=(UIButton *)[clickedCell.contentView viewWithTag:100];
UIButton *noBTN=(UIButton *)[clickedCell.contentView viewWithTag:111];
[yesBTN setBackgroundColor:[UIColor colorWithRed:0.23 green:0.62 blue:0.23 alpha:1.0]];
[noBTN setBackgroundColor:[UIColor whiteColor]];
}
- (IBAction)noBtnAction:(id)sender {
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *indexPath = [self.take5table indexPathForCell:clickedCell];
UIButton *yesBTN=(UIButton *)[clickedCell.contentView viewWithTag:100];
UIButton *noBTN=(UIButton *)[clickedCell.contentView viewWithTag:111];
[yesBTN setBackgroundColor:[UIColor whiteColor]];
[noBTN setBackgroundColor:[UIColor redColor]];
}
非常感谢任何帮助/建议。
答案 0 :(得分:3)
问题是你没有正确处理细胞再利用。
您需要确保cellForRowAtIndexPath
正确设置每个按钮的状态。这需要基于您在数据模型中跟踪的某些状态。此数据模型需要在单击每个按钮时更新。
您正试图将状态保留在按钮中。这不起作用。
答案 1 :(得分:1)
我不认为它是因为被调用的函数相同。
你的问题是由于细胞出列。例:
在第一个单元格中,单击按钮时,您将yesBTN
更改为其他颜色。因此,当重新使用单元格时,您正在使用具有更改颜色的相同单元格。您可以尝试的是:
将点击的所有按钮的indexPath.row
添加到NSMutableArray
,并在cellForRowAtIndexPath
检查数组是否包含该indexPath.row
答案 2 :(得分:-1)
我认为此代码对您有帮助
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *Cell = [tableView dequeueReusableCellWithIdentifier:@"" forIndexPath:indexPath];
[cell.buttnName1 addTarget:self action:@selector(BtnAction:) forControlEvents:UIControlEventTouchUpInside];
[cell.buttnName2 addTarget:self action:@selector(BtnAction:) forControlEvents:UIControlEventTouchUpInside];
return Cell;
}
//action for button
- (void)BtnAction:(id)sender//type 1 button action
{
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
UIButton *button = sender;
for (button in clickedCell.ButtonArr)//button create IBOtletcollections
{
[button setSelected:([button isEqual:sender])?YES:NO];
if ([button isSelected]) {
[button setBackgroundImage:[UIImage imageNamed:@"select_toggle"] forState:UIControlStateSelected];
tagType = button.tag;
//use local variable Tagtype(NsIntiger)
}else{
[button setBackgroundImage:[UIImage imageNamed:@"unselect_toggle"] forState:UIControlStateNormal];
}
}
}