UITableViewCell 原型在同一视图控制器中的两个 UITableView 之间重用
Posted
技术标签:
【中文标题】UITableViewCell 原型在同一视图控制器中的两个 UITableView 之间重用【英文标题】:UITableViewCell prototype reuse between two UITableViews in the same view controller 【发布时间】:2013-04-15 01:42:15 【问题描述】:从一个表中提取 UITableViewCell 原型并在另一个表中使用它们是否安全?
当我想在另一个 UITableView 中显示 UITableViewCell 时,我只是将指定原型类型单元格的表中的一个可重用单元格 dequeueReusableCellWithIdentifier。也就是说,不是它们将在其中显示的 UITableView。
它似乎工作正常,我没有注意到日志中有任何错误,但我担心它可能会导致奇怪的问题,因为我以前没有见过它。
我应该简单地为每个单元格使用单独的笔尖来实现吗?或者这种方法是好的、不好的做法还是危险的?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (self.prototypesTableView == tableView)
cell = [self.prototypesTableView dequeueReusableCellWithIdentifier:cellType];
else if (self.otherTableView == tableView)
cell = [self.otherTableView dequeueReusableCellWithIdentifier:cellType] ?: [self.prototypesTableView dequeueReusableCellWithIdentifier:cellType];
【问题讨论】:
在写这篇文章时,我现在想知道另一张表中使用的单元格会发生什么情况,我猜它们只是建立起来并且永远不会重复使用。也许我已经回答了我自己的问题。我总是可以先从正确的表中出列,并且只在必要时才去原型表。 【参考方案1】:我很确定内存中的每个表视图都有自己的表视图单元队列。
当表格视图(以及承载它的视图)消失时,与其关联的所有对象都将被释放(假设此处为 ARC)。有两个表的一个视图应该无关紧要:每个表都有自己的要出列的单元格集合。
在我自己的代码中,我经常在一张表中重复使用相同的自定义“UITableViewCell
”。要注册一个自定义 UITableView 单元格(这将是 XIB 文件中的唯一对象),我这样做:
UINib * nib = [UINib nibWithNibName: @"SomeVeryCustomCell" bundle: nil];
if(nib)
[myTableView registerNib: nib forCellReuseIdentifier:@"SomeVeryCustomCell"];
【讨论】:
嗨迈克尔,我正在寻找某种形式的确认,以确认可以在一个表中创建一个原型单元格并在另一个表中使用它。这意味着在界面生成器中,我只需要在一个表中指定原型而不是两个表。我认为这不是标准做法,所以我想知道它是否会导致问题。如果我理解,您似乎在谈论使用在另一个 nib 文件中指定单元格的外部 nib 方法,我知道您可以这样做,但我已经在情节提要中指定了原型单元格,并且不希望将它们迁移到单独的笔尖。 +1 因为虽然它没有回答我关于安全的问题,但我认为它是一种更好的细胞重用方法。【参考方案2】:此代码现在在生产环境中运行,我没有看到由于将可重用单元格从一个表中出列并在另一个表中使用它们而造成的不良影响。为了确保正确重用,我总是从“otherTableView”中出列,如果没有可用的 UITableCell,则从“prototypesTableView”中出列。
虽然为了方便起见我这样实现它,但我建议最好按照 Michael 建议的方式实现它,因为它提供了在视图控制器之间共享单元格的更大能力。
【讨论】:
以上是关于UITableViewCell 原型在同一视图控制器中的两个 UITableView 之间重用的主要内容,如果未能解决你的问题,请参考以下文章
如何区分原型 UITableViewCells 中同一视图的实例
自定义 UITableViewCell 的自动布局约束在运行时失败
带有故事板原型的 UITableViewCell 子视图的动态大小