关于这个主题有很多问题,我已经尝试了几个小时的各种选项,但我需要一些真正的帮助。
主要前提是:我有Tab Bar controller
有两个标签;第一个是Timeline
,第二个是In-App Settings
(table view controllers
)。在In-App settings
中,当我选择"键盘"时,我通过带有两个静态单元格的光线进入另一个表格视图:光明和黑暗。
我想要实现的是:当我点击其中一个单元格时,它会在checkmark accessory
上放置cell
视图。
使用NSUserDefaults
,我想维护所选的单元格并设置该单元格' accessoryType用于勾选下一个视图重新加载。
我按照这个问题'选择答案,而我的代码允许我选择Light或Dark单元格;它从不保持在重新加载之间。
这是我的cellForRowAtIndexPath
:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
self.selectedKeyboardCell = [[NSUserDefaults standardUserDefaults] objectForKey:@"Selected"];
NSLog(@"The selected keyboard is %@", self.selectedKeyboardCell);
if([self.checkedIndexPath isEqual:indexPath])
{
NSLog(@"Loaded");
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
NSLog(@"Not Loaded");
cell.accessoryType = UITableViewCellAccessoryNone;
/*if ([self.selectedKeyboardCell isEqualToString:@"Light"])
{
NSLog(@"P");
if (indexPath.row == 0)
{
NSLog(@"Q");
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
cell.accessoryType = UITableViewCellAccessoryNone;
}
else
{
NSLog(@"R");
if (indexPath.row == 1)
{
NSLog(@"Z");
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
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;
self.selectedKeyboardCell = cell.textLabel.text;
[[NSUserDefaults standardUserDefaults] setObject:self.selectedKeyboardCell forKey:@"Selected"];
self.selectedKeyboardTheme = cell.textLabel.text;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[[NSUserDefaults standardUserDefaults] setObject:self.selectedKeyboardTheme forKey:@"Keyboard"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
我的[self.keyboardTableView reloadData];
中有一个viewWillAppear
。
我已经注释了一些我一直在尝试的代码,但不管我读了多少帖子,我都找不到解决方案。
这个问题谈到将代码转移到viewWillAppear,但我不知道他说的是什么代码:Ho to refresh view and tableview, and checkmark a default setting cell on load?
问题:我想在表视图中选择一个单元格,并在下次(并且每次加载此视图时)使用复选标记附件类型选择该单元格。它是一个静态表,文本只能说是光明或黑暗。
在cellForRowAtIndexPath
中,self.selectedKeyboardCell
准确地告诉我它是亮还是暗,具体取决于在加载视图之前选择了哪个单元格。但是,我怎么说"如果Light,请在FIRST单元格上设置复选标记并从第二个单元格中删除复选标记,如果为Dark,则在SECOND单元格上设置复选标记并从第一个单元格中删除复选标记" 。
更新:
为清楚起见,我可以选择Light或Dark静态表视图单元格,无论选择哪个单元格,都会正确显示复选标记。问题是当我转到另一个视图并返回到此视图时,先前选择的单元格不显示。我已将selectedCell的textLabel
保存到NSUserDefaults
,在NSLog
中,它会显示所选单元格的文本,但它不会显示我的复选标记选定的单元格。
更新二: 为了在第一次运行应用程序时将默认选定的单元格设置为Light,我在cellForRowAtIndexPath中执行了以下操作:
if (!self.selectedKeyboardCell)
{
self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
对此的任何指导都将受到重视。
答案 0 :(得分:1)
老实说,你的代码有点令人困惑,如果你多说了一些实际有用的东西,它会有所帮助。但是:
在viewWillAppear
中,您应该设置self.checkedIndexPath
:
if ([self.selectedKeyboardCell isEqualToString:@"Light"])
{
self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
}else{
self.checkedIndexPath = [NSIndexPath indexPathForRow:1 inSection:0];
}
[self.keyboardTableView reloadData];
正确?