单击自定义uitableviewcell中的一个uibutton,在uitableview中选择多个uibutton

时间:2014-12-05 15:54:57

标签: ios objective-c uitableview uiscrollview

我在uiviewcontroller的childViewController中有一个uitableview。在uitableview中,我使用了自定义的uitableviewcell。在那个自定义的uitableviewcell中,我有最喜欢的复选框按钮。

这个uitableview包含大约30条记录,大约10条记录显示在可见屏幕上,然后滚动另外10条记录,然后是另一条记录。

问题是当我在第一行选择一个uibutton,然后向下滚动uitableview时,我看到它在第11行和第21行也被选中了。我现在已经半天了,但无法发现问题。请帮忙。

以下是cellForRowAtIndexPath代码:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

ABCViewCell *cell = (ABCViewCell*)[tableView dequeueReusableCellWithIdentifier:@"ABCViewCell" forIndexPath:indexPath];
cell.delegate = self;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.layoutMargins = UIEdgeInsetsZero;
cell.labelDesiredDate.text = [dateFormatter stringFromDate:[NSDate date]];
cell.labelJournaledDate.text = [dateFormatter stringFromDate:[NSDate date]];

return cell; }

谢谢, 阿都

1 个答案:

答案 0 :(得分:1)

您必须记住,当您使用dequeueReusableCellWithIdentifier方法时,您的单元格将开始用于绘制所有内容。因此,您必须考虑清理数据的方法。

如下:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ABCViewCell *cell = (ABCViewCell*)[tableView dequeueReusableCellWithIdentifier:@"ABCViewCell" forIndexPath:indexPath];
    if ([self shouldMyCellBeSelected]) {
        [cell displayButtonSelected];
    } else {
        [cell displayButtonUnselected];
    }
    return cell;
}
  1. shouldMyCellBeSelected 。你应该有一个函数来确定一个特定的细胞是否在 应该选择给定的位置。你可以通过拥有一个 单独的用户单元格选择索引列表并进行比较 当前待绘制单元格以查看它是否在该列表中。
  2. displayButtonSelected / displayButtonUnselected 。然后你应该有一个功能来显示你的单元格选择和未选择。这可以通过更改按钮的图像或激活/停用它来实现。
  3. 希望有所帮助