0

我的应用程序的“设置”页面有问题。我选择使用静态单元格,所以我有几个表格部分,每个部分有 3-4 个单元格。

在 viewDidLoad 我加载我的 NSUserDefaults 并设置附件标记,如下所示:

...
}
else if ( ... my Condition3 ... ) {
    indexPath = [NSIndexPath indexPathForRow:2 inSection:0];
}
UITableViewCell* cell = [settingsTable cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;

这工作正常,它使用复选标记设置具有匹配设置的单元格。但是,这仅适用于默认显示在屏幕上的单元格。任何需要滚动的单元格不包含复选标记。

有没有办法解决这个问题,最好不必使用动态单元格?

4

2 回答 2

4

啊,我终于想通了。cellForRowAtIndexPath 使应用程序崩溃,因此我必须执行以下操作:

我使用上面的代码(在问题中)在我的 viewDidAppear 方法中设置了需要复选标记的单元格。我还删除了所有复选标记,然后像以前一样在 didSelectRowAtIndexPath 方法中的选定单元格中添加一个。

在这两种方法中,我将一个 NSString 变量设置为所选单元格的 .textview.text ,然后实现此方法:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    cell.accessoryType = UITableViewCellAccessoryNone;

    if ([cell.textLabel.text isEqualToString:[NSString stringWithFormat:@"%@", myFirstString]] || [cell.textLabel.text isEqualToString:[NSString stringWithFormat:@"%@", mySecondString]]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
}

希望这可以帮助某人。

于 2012-08-17T09:01:59.683 回答
0

那是因为当您滚动时,您的单元格会被重建并且复选标记会被清除。

您需要在

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
于 2012-08-16T09:05:02.273 回答