UITableView中的UIButton单击目标c中的多个按钮

时间:2016-11-07 05:34:35

标签: ios objective-c uitableview

我在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]];
}

非常感谢任何帮助/建议。

3 个答案:

答案 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];
                }
            }



        }