我在UITableViewController
中遇到了一些奇怪的行为。
我已经将UITableViewCell子类化,并由其中的“visit”属性创建。
- (void)setVisited:(BOOL)visited animated:(BOOL)animated
{
[self setVisited:visited];
...
}
我在tableView:cellForRowAtIndexPath:
(我创建它的唯一地方)中创建单元格时设置此属性,如下所示:
if (cell == nil) {
cell = [[ArticleListViewCell alloc] initWithReuseIdentifier:CellIdentifier art:art index:indexPath.row];
[cell setVisited:NO animated:NO];
}
稍后,在tableView:didSelectRowAtIndexPath:
中,我将此属性设置为YES
:
ArticleListViewCell *cell = (ArticleListViewCell *) [tableView cellForRowAtIndexPath:indexPath];
[cell setVisited:YES animated:NO];
然而,当我选择一个单元格然后返回到当前有10个单元格的UITableView
时,我发现不仅我选择的单元格变为“已访问”,而且还有另一个单元格。这很难解释,但是如果我选择第一个单元格,第7个单元格也会被访问,如果我选择第二个,第8个也会被访问,依此类推。有谁知道这是为什么,以及我该如何解决它?
我已经检查了this question,但似乎没什么帮助。
答案 0 :(得分:2)
这是由细胞重用引起的。您需要每次都设置visited
,而不仅仅是在创建单元格时。
if (cell == nil) {
cell = [[ArticleListViewCell alloc] initWithReuseIdentifier:CellIdentifier art:art index:indexPath.row];
}
BOOL visited = ... // value for this indexPath
[cell setVisited:visited animated:NO];
在您的didSelectRow
方法中,您需要更新某种数据结构,以跟踪访问过哪一行。您可以使用此数据在cellForRow
方法中正确设置值。
请勿使用单元格来跟踪状态。细胞是一个视图。您的数据源需要跟踪状态。