iOS7:Tableview不会加载附件更改

时间:2014-06-23 19:03:26

标签: ios objective-c uitableview ios7

所以我在didSelectRowAtIndexPath上调用了这个方法:

- (void)selectTableViewRow:(int)row {
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]] setAccessoryType:UITableViewCellAccessoryNone];
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:1]] setAccessoryType:UITableViewCellAccessoryNone];
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:1]] setAccessoryType:UITableViewCellAccessoryNone];
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:1]] setAccessoryType:UITableViewCellAccessoryCheckmark];
}

(它只有三个单元,所以没有for循环)

它完美无缺。选择一个单元格后,会出现一个复选标记,其他单元格将被删除。 但是当我在viewDidLoad中调用此方法时,没有任何图形变化。

我是否必须在setAccessoryType之后重新加载表格视图?

2 个答案:

答案 0 :(得分:1)

这是因为您的tableView将在-viewDidLoad完成后重新加载其数据。这意味着您的表视图将在表视图数据源中调用-tableView:cellForRowAtIndexPath:,并且它将使用在那里指定的任何单元附件。

您应该在tableView:cellForRowAtIndexPath:

中指定您的手机配件

答案 1 :(得分:1)

在viewDidLoad时间,您的单元格在需要之前不会被创建。你必须要小心,因为cellForRowAtIndexPath,如果正确完成可以生成全新的单元格,并抛弃你已经创建的单元格。您应该将setAccessoryType的代码移动到cellForRowAnIndexPath中,并让它检查是否应根据设置为当前所选行的变量选择每个单元格,并将其与indexPath.row进行比较。 问题是iOS可以抛弃和重用细胞。如果在例程中设置单元格1的附件视图,它可能会在末尾滚动,并在其他地方重复使用,现在称为单元格7.因此单元格7具有已检查的附件视图,单元格1处于屏幕外。 换句话说,cellForRowAtIndexPath将单元格提供给tableView。您可以根据调用的indexPath正确设置其内容,尤其是在重复使用单元格时 - 您必须清除附件视图或为每个被调用的单元格设置它。