当我选择一行时,我让 didSelectRowAtIndexPath 放置了一个复选标记指示器。我的 TableView 显示在弹出窗口中,并且有更多数据可以容纳在屏幕中。问题是当我向下滚动以查看更多行时,滚动时加载的第一个单元格也有复选标记指示器。
例如,如果我的 TableView 中有 30 行,如果我在屏幕上选择我的行,则屏幕可以容纳 15 行。如果我滚动查看更多行,第 16 行也有复选标记。 同样,如果我选择 2 行并向下滚动,第 17 行也会被选中。
我一次只需要让用户选择一行。我的 didselectrowatindexpth 无法始终如一地工作。如果有人有合适的工作版本,请分享或建议我如何解决这个问题。 此外,我的 TableView 中有两个部分。因此,用户只能从任何一个部分中选择一行。
我的 didSelectRowAtIndexPath 代码。
int newRow = [indexPath row];
int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
if (newRow != oldRow || (newRow == 0 && oldRow == 0)) {
UITableViewCell *cell = [bTableView cellForRowAtIndexPath:indexPath];
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
UITableViewCell *oldCell = [bTableView cellForRowAtIndexPath:lastIndexPath];
oldCell.accessoryType = UITableViewCellAccessoryNone;
lastIndexPath = indexPath;
最佳答案
您对单元格所做的任何更改都应在 cellforrowatindexpath
委托(delegate)方法中重置,因为它们将被重用。因此在此方法中返回单元格之前重置。并有一个变量来保存选定的值并相应地更新。所以基本上您的数据源应该能够保存所选行的值而不是单元格。
关于iphone - 如果 tableview 的行数多于它在 ipad 屏幕上显示的行数,则 didselectrowatindexpath 方法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7201324/