iPhone - 保持tableview状态的最简单方法?

时间:2011-05-16 17:13:34

标签: iphone ios uitableview

我目前有一个简单的桌面视图,里面有7个单元格。选择行时,我会向单元格添加一个复选标记,反之亦然,当选中已经选中的单元格时,它将被取消选中。

然而,当我退回桌面视图并返回时,所有复选标记都消失了。

我想知道IOS中最简单的解决方案是什么来保持已检查单元格的状态,以便当我返回到表格视图时,检查标记仍然存在于已检查的单元格中?

5 个答案:

答案 0 :(得分:2)

我在这段话题上读了一些帖子。它数字我找不到帮助我的确切的一个,但这里有一些我认为很好的:

答案 1 :(得分:1)

执行此操作的最简单方法是将这些已检查状态保存在表视图中的某个位置。这假设您的表视图在您离开屏幕时会留在内存中。如果表视图没有保存在内存中(就像你在决定在那里导航时分配它,并在你离开时被释放),那么将它保存在app delegate中的某个地方可能是最容易的,因为我们知道在应用程序的生命周期内保留在内存中

答案 2 :(得分:1)

您要做的是在您的数据模型上提供每个单元格设置的数据,添加一个标记(如果您还没有),将用于指示此情况。确保根据特定单元格的数据模型在tableView:cellForRowAtIndexPath:中设置单元格的复选标记。

当您回到它时,如果您的数据源没有更改,当tableview在显示tableview之前再次设置其单元格时,它将使用该数据根据数据源中的设置显示复选标记

答案 3 :(得分:0)

在sqlite中存储tableview状态

答案 4 :(得分:0)

将状态保存在NSUserDefaults中。

你的didSelectRowAtIndexPath tableView委托方法中的

用这样的东西设置用户默认值:

NSUInteger defaultsCheckedRow=[[NSUserDefaults standardUserDefaults] integerForKey:@"rowForCheckedCellInNameOfTableViewController"];
if (defaultsCheckedRow==indexPath.row){
   // deselect the row 
   defaultsCheckedRow=defaultsCheckedRow*-1;
}else{
   defaultsCheckedRow=indexPath.row;
}
[[NSUserDefaults standardUserDefaults] setInteger: defaultsCheckedRow forKey: "rowForCheckedCellInNameOfTableViewController"]
[[NSUserDefaults standardUserDefaults] synchronize];
[self.tableView reloadData];

然后在您的cellForRowAtIndexPath:数据源委托方法中,您可以执行以下操作:

NSUInteger defaultsCheckedRow=[[NSUserDefaults standardUserDefaults] integerForKey:@"rowForCheckedCellInNameOfTableViewController"];
if (indexPath.row==defaultsCheckedRow){
   cell.accessoryType=UITableViewCellAccessoryCheckmark;
}else{
   cell.accessoryType=UITableViewCellAccessoryNone;
}