Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将UITableView选定单元格的UIAccessoryType永久保留为NSUserDefaults_Ios_Iphone_Nsuserdefaults_Uitableview - Fatal编程技术网

Ios 将UITableView选定单元格的UIAccessoryType永久保留为NSUserDefaults

Ios 将UITableView选定单元格的UIAccessoryType永久保留为NSUserDefaults,ios,iphone,nsuserdefaults,uitableview,Ios,Iphone,Nsuserdefaults,Uitableview,关于这个话题有很多问题,我已经尝试了几个小时,有各种各样的选择,但我需要一些真正的帮助 主要前提是:我有一个带有两个选项卡的选项卡栏控制器;第一个是时间线,第二个是应用程序内的设置,包括两个表视图控制器。在应用内设置中,当我选择键盘时,segue会将我带到另一个表视图,其中有两个静态单元格:亮和暗 我想要实现的是:当我点击其中一个单元格时,它会在该单元格上打上复选标记“附件视图” 使用NSUserDefaults,我希望维护所选单元格,并在下次重新加载视图时将该单元格的accessoryType

关于这个话题有很多问题,我已经尝试了几个小时,有各种各样的选择,但我需要一些真正的帮助

主要前提是:我有一个带有两个选项卡的选项卡栏控制器;第一个是时间线,第二个是应用程序内的设置,包括两个表视图控制器。在应用内设置中,当我选择键盘时,segue会将我带到另一个表视图,其中有两个静态单元格:亮和暗

我想要实现的是:当我点击其中一个单元格时,它会在该单元格上打上复选标记“附件视图”

使用NSUserDefaults,我希望维护所选单元格,并在下次重新加载视图时将该单元格的accessoryType设置为选中标记

我遵循这个问题的选择答案,而我的代码允许我选择光明或黑暗的细胞;它从不在重新加载之间保持这种状态

这是我的cellForRowAtIndexPath:

if (!self.selectedKeyboardCell)
{
    self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
我的didSelectRowAtIndexPath是:

我有一个[self.keyboardTableView重载数据];在我的视野中会出现

我已经注释掉了一些我一直在尝试的代码,但是无论我读了多少篇文章,我都无法在这里找到解决方案

这个问题涉及到将代码转移到视图,但我不知道他在说什么代码:

问题:我想在表格视图中选择一个单元格,并在下次和每次加载此视图时使用复选标记附件类型选择该单元格。这是一个静态的表格,文本只会说“亮”或“暗”

在cellForRowAtIndexPath中,self.selectedKeyboardCell会准确地告诉我它是亮还是暗,这取决于加载视图之前选择的单元格。但是,如何说如果亮,则在第一个单元格上设置复选标记并从第二个单元格中删除复选标记;如果暗,则在第二个单元格上设置复选标记并从第一个单元格中删除复选标记

更新: 为清晰起见,我可以选择浅静态表格视图单元格或暗静态表格视图单元格,无论选择哪个单元格,复选标记都会正确显示。问题是,当我转到另一个视图并返回此视图时,以前选择的单元格不会显示。我正在将selectedCell的textLabel保存到NSUserDefaults,并在NSLog中显示所选单元格的文本,但不显示所选单元格上的复选标记

更新二: 为了在应用程序第一次运行时将默认选定的单元格设置为亮起,我在CellForRowatineXpath中执行了以下操作:

if (!self.selectedKeyboardCell)
{
    self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

对此的任何指导都将不胜感激

老实说,您的代码有点混乱,如果您多说一点实际工作的话,它会有所帮助。但是:

在将出现的视图中,您只需设置self.checkedIndexPath:

if (!self.selectedKeyboardCell)
{
    self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

是吗?

亲爱的@Nils-我很抱歉我的问题不够清晰,但你的回答做得很好。我将更新我的问题,以确保问题的清晰度。不过我有一个快速跟进的问题。如果我卸载并重新安装我的应用程序,带有复选标记的默认单元格为黑色;我希望它是InExpathForRow:0的光电池。我试着把它添加到故事板上,把复选标记添加到光电池上,但没有什么不同。在应用程序第一次运行到Light时,我将如何以及在哪里设置默认的selected状态?实际上,我刚刚让它工作,并用Update Two更新了我的问题,以反映代码的完成情况。我真的非常感谢@Nils-你帮我节省了很多时间,也帮我让这一切顺利进行。我真的很感激。如果可以的话,我会投你两次票。
if ([self.selectedKeyboardCell isEqualToString:@"Light"])
{
   self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
}else{
   self.checkedIndexPath = [NSIndexPath indexPathForRow:1 inSection:0];
}
[self.keyboardTableView reloadData];