Xcode在静态单元上设置附件标记错误

时间:2012-08-16 08:55:30

标签: iphone ios uitableview

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

在viewDidLoad中我加载了我的NSUserDefaults并设置了这样的附件标记:

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

这样可以正常工作,并使用Checkmark将匹配设置设置为单元格。但是,这仅适用于默认情况下屏幕上的单元格。任何需要滚动的单元格都不包含复选标记。

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

2 个答案:

答案 0 :(得分: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;
    }
}

希望这可能有助于某人。

答案 1 :(得分:0)

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

您需要在

中进行设置
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath