所以我知道它通常不赞成修改 cellForRowAtIndexPath 之外的单元格,但这是我所拥有的:
我有一个用作问题索引的静态表(1-33)。每行都有一个问题和一个详细披露指标。所有这些都是在故事板上手动输入的。
我有一个文件,其中列出了每个问题和一些属性,例如问题是否已被回答。
当此屏幕加载(viewDidAppear)时,我想检查这些问题中的每一个是否已加载,如果已加载,请将详细信息指示器切换为复选标记。
现在这适用于前 5 个单元格。如果我去一个问题然后回来,那么会检查更多的单元格(即使问题没有得到回答)。这是未定义的行为,因为我在 cellForRowAtIndexPath 之外访问它吗?
这是我用来访问和更改单元格的代码:
-(void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (question1Answered)
{
UITableViewCell *cell1 = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:3]];
[cell1 setAccessoryType:UITableViewCellAccessoryCheckmark];
}
}
同样,它确实适用于前 5 个元素,然后无论我做什么,其余的都不会改变。然后,如果我去一个问题并返回它会显示更多选择它。奇怪的行为...
编辑:我刚刚注意到上面的代码有效,但它只更新当前屏幕上的单元格。因此,如果我向下滚动,离开并返回所有可见单元格都会有复选标记。有没有办法强制刷新所有单元格,即使它们不可见?
感谢您的任何帮助...
-大卫