我目前有一个简单的表格视图,其中有7个单元格。当选择一行时,我会在单元格中添加一个勾选标记,反之亦然,当选择已经被勾选的单元格时,它将取消勾选。
但是,当我退出表格视图并返回时,所有勾选标记都消失了。
我想知道在iOS中最简单的解决方案是什么,以保持勾选单元格的状态,以便当我返回到表格视图时,勾选标记仍然存在于已勾选的单元格中?
我目前有一个简单的表格视图,其中有7个单元格。当选择一行时,我会在单元格中添加一个勾选标记,反之亦然,当选择已经被勾选的单元格时,它将取消勾选。
但是,当我退出表格视图并返回时,所有勾选标记都消失了。
我想知道在iOS中最简单的解决方案是什么,以保持勾选单元格的状态,以便当我返回到表格视图时,勾选标记仍然存在于已勾选的单元格中?
我之前读了一些关于这个主题的帖子。虽然我找不到确切的帮助我的那篇文章,但以下几篇我认为都很好:
你需要做的是在提供每个单元格数据的数据模型上添加一个标志(如果你还没有),用于指示这种情况。确保在tableView:cellForRowAtIndexPath:
中根据该特定单元格的数据模型设置单元格上的复选标记。
当你回到它时,只要你的数据源没有改变,在显示表视图之前,当表视图再次设置其单元格时,它将使用该数据来显示基于数据源设置的复选标记。
将状态保存在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;
}
将TableView状态存储在SQLite中
tableView:cellForRowAtIndexPath:
,那么让表格知道它应该用什么来填充单元格有什么问题吗? - Dan F