2

当我向上和向下滚动 UITableView 时不需要重新加载其单元格时,我遇到了这个问题。简而言之,我创建了自定义单元格,其中包含用户可以通过单击展开的内容。例如,我有一个UILabel包含很多文本,但没有完全显示,但用户可以单击按钮并展开文本,从而展开标签。这一切我都是通过[tableview beginUpdates]and来实现的[tableview endUpdates]。但是当我单击按钮并展开文本或图像并向下滚动到其他单元格然后向上UITableView当然重新加载我的单元格的内容并且文本再次隐藏但单元格保持相同的大小并且这看起来很难看。我可以以某种方式自定义UITableView回收机制或更新内部单元缓存吗?

4

2 回答 2

7

您不能禁用重新加载。正确的解决方案是确保您保存每个单元格的状态(扩展与否),因此当单元格由于滚动需要重新加载时,您可以为当前状态提供适当的高度和内容。

于 2013-01-26T18:19:33.947 回答
2

你有几个选择。

许多人忽略的一个是不要使用 UITableView,而是使用 UIScrollView。只需将您的每个“单元格”创建为 UIView 子类并将它们放置在 UIScrollView 中您想要的位置。唯一的问题是你必须自己让它看起来像一个表格视图,在每个单元格的子视图和/或背景之间有分隔符。

另一种选择可能是保留您自己对每个 Cell 的引用并告诉 UITableView 不要重用它们。就像是:

- (void) initializeMyCells {
  self.cellArray = [NSMutableArray arrayWithCapacity:5];
  for ( int i = 0; i < 5; ++i ) {
     MyCellType *cell = [[MyCellType alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:nil]];
     [self.cellArray addObject:cell];
  }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  return self.cellArray[indexPath.row];
}
于 2013-01-26T20:41:05.027 回答