2014-12-05 42 views
0

我在uiviewcontroller的childViewController中有一个uitableview。在那个uitableview里面,我使用了自定义的uitableviewcell。在那个自定义的uitableviewcell中,我有最喜欢的复选框按钮。点击一个在自定义uitableviewcell中的uibutton在uitableview中选择多个uibuttons

该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

请张贴代码为您的表视图的的cellForRowAtIndexPath。听起来你正在重复使用表格单元格(好),但没有准备好重用它们。 – 2014-12-05 16:17:58

+0

感谢迈克,我已经添加cellForRowAtIndexPath代码 – 2014-12-05 16:33:39

回答

1

你要记住,当你正在使用dequeueReusableCellWithIdentifier方法,你的细胞开始recicle绘制所有内容。所以你必须考虑一种清理你的数据的方法。

东西如下:

- (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。那么你应该有一个功能来显示你的单元格Selected和Unselected。这可以通过更改按钮的图像或激活/停用按钮来实现。

希望帮助

相关问题