0

我有一个选项卡栏,其中一个选项卡有一个 UINavigationController,它被分配了一个根视图控制器,该控制器由一个 UITableView 组成,可以深入了解更多选择。在我的根视图控制器中选择一个项目后,我得到了另一个 uitableview,我使用以下代码在我的cellForRowAtIndexPath中使用以下代码只为该部分或组 分配一个复选标记。

if([self.checkedIndexPath isEqual:indexPath])
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}

以及didSelectRowAtIndexPath中的以下内容:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Uncheck the previous checked row
if(self.checkedIndexPath)
{
    UITableViewCell* uncheckCell = [tableView
                                    cellForRowAtIndexPath:self.checkedIndexPath];
    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}
UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
self.checkedIndexPath = indexPath;

[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

我的问题是,当我使用导航菜单上的后退按钮并返回相同的 UItableview 时,复选标记消失了。但是,当我在该视图中上下滚动时,情况并非如此。当我使用导航控制器来回移动时,如何将这些复选标记保留在那里。

4

1 回答 1

1

我相信您遇到了这个问题,因为每当您来回移动时,您都会推送一个新的 UIViewController 实例 - 新实例不知道之前的 checkedPath 属性是什么。

要解决此问题,您需要:

  1. 以某种方式保留检查的行值(NSUserDefaults、CoreData 等)。这样任何实例都将获得相同的选中行值
  2. 推送时重复使用相同的视图控制器。
于 2012-11-24T02:45:52.643 回答