问题标签 [prepareforreuse]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1536 浏览

ios - Swift iOS - 如何清理单元格的类属性和 ImageView 的图像(也在单元格内)?

我在我的应用程序中使用 CollectionViewCells 和 TableViewCells,但对于这个示例,我将列出 TableViewCell 信息,因为它们都使用prepareForReuse.

在牢房内,我有:

当我获得单元格的表格数据时,我将数据提供给cellForRowAtIndexPath. 我将它传递给data单元格内的属性,并将单元格的缩略图和标题插座设置为 in awakeFromNib()。我了解单元格是如何从场景中滚动出来然后重新使用的,所以我用它prepareForReuse来清理单元格。

苹果在这里说

出于性能原因,您应该只重置与内容无关的单元格属性,例如 alpha、编辑和选择状态。重用单元格时,tableView(_:cellForRowAt:) 中的表视图委托应始终重置所有内容。

当需要清理单元格时,prepareForReuse我通过反复试验发现清理标签文本的最佳方法是使用label.text = ""而不是使用label.text = nil上面的内容,显然 Apple 不想prepareToReuse用于轻度清洁向上。但是,我已经阅读了关于 SO 的其他帖子,最好通过将 AVPlayerLayer 设置为nil并将其从prepareForReuse.

我有 2 个问题

  1. 如果不在里面prepareForReuse,那么我在哪里将currentTimeanddata属性重置为nilimageView's imageto nil?这是假设应用程序被发送到后台并且currentTime属性设置为某个值。
  2. 如果我不能将标签的文本设置为 nil inprepareForReuse那么为什么最好将 AVPlayerLayer 设置为 nil in prepareForReuse

表视图单元格:

cellForRowAtIndexPath:

0 投票
1 回答
184 浏览

ios - iOS UICollectionView 与垂直 UICollectionView 单元格内的水平滚动重用

滚动带有水平集合视图的垂直集合单元格时出现性能问题。原因是单元格的数据重用 - 在每个父单元重用周期上重新加载水平集合视图。有谁知道我怎样才能避免这么多的重新加载?

0 投票
1 回答
3504 浏览

ios - 在 UITableView 中重用单元格

我有我的自定义单元格“NewsCell”。它包含我的自定义视图“ImageMosaicView”(这只是 UIView 的子类)。我用它来显示像 Facebook 帖子中的照片。我只是将图像的网址传递给 ImageMosaicView 的实例,然后它会加载并显示。

我有一个问题。当我快速滚动 tableView 时,前一个单元格中的图像会在新单元格中出现片刻,同时正在加载新图像。但我不知道它们是如何出现在那里的,因为我提供了默认图像。这是一个例子

我怎样才能避免这种情况?

0 投票
1 回答
68 浏览

ios - 使用 UICollectionView 的转换传递数据

我正在尝试在 Swift 4.1 中使用 Cosmic Mind 的 Material 框架来实现类似 Photo View Collection 的东西。

在传统的 segue 中,我可以做这样的事情来将数据从 1 个 VC 传递到另一个,

我看到的负责交换视图控制器的唯一代码行是这样的,

如何传递与准备 segue 相同的数据。是否有任何委托方法可以实现以获得该功能?

0 投票
3 回答
612 浏览

ios - 重置 UITableViewCell 无法正常工作/未选择的单元格在滚动后显示为选中状态

在此处输入图像描述

问题是当我在选择 collectionViewCell (日期 28 为紫色)后滚动 tableview 时。tableview 底部的几个 CollectionViewCells 似乎被选中(这里 CollectionView 存在于 TableView 中)。

代码是这样的:

UITableViewCell:

让我知道是否需要添加任何其他内容。

0 投票
2 回答
575 浏览

ios - NSLayoutConstraints 在 UITableViewCell 中不受尊重

我有一个UITableViewCell与一个UILabel和一个UIImageView。图像可以是可见的或隐藏的。

这是我的故事板: 故事板截图

的尾部有两个约束UILabel,一个 (a) 等于 8 与UIImageView,另一个 (b) 大于或等于 8 与单元格的右边距。我保留第一个 (a) 的参考,如果有声音或没有声音,我会激活或停用约束。

这是我的代码:

我有几个带有可见声音图标的单元格,很多没有。以下是特定单元格首次出现时的样子:

良好的行为

当它再次出现在屏幕上时的样子:

不良行为

我确实知道问题出在被重复使用的单元格上。但我不明白如何防止这种行为。我试着做:

在重用单元格之前重新激活约束,但它不起作用。

0 投票
1 回答
274 浏览

ios - UICollectionView | 细胞可重复使用

所以,UICollectionView现在对我来说真的很痛苦。考虑我有UIViewController一个UICollectionView嵌入其中的。好吧,CollectionView 的每个单元格几乎都是UIViewController. 每个单元格都包含一些按钮和图像。当我选择一个按钮并倾向于使按钮保持其状态时,CollectionView 会重用该单元格,并且还会在其他单元格中复制单元格状态。但是,当我尝试将单元格放入数组中并且想要检查该数组中单元格的状态时,该cellForItemAt方法会覆盖这些单元格。我感到很困惑。请帮忙。即使prepareForReuseUICollectionViewCell没有帮助。这是一些代码:

任何帮助都非常感谢。

0 投票
2 回答
332 浏览

swift - TableviewCell中的Collectionview,数据重复

我在可调整大小的 tablviewCells 中有一个 collectionview。Tableview 在每个“n”个部分中有一个单元格。集合视图的数据源和委托设置为 tableviewCell。在 tablview 的 cellForRowAt 上调用了一个 API,结果在每个单元格的 collectionview 上呈现。获取结果后,委托告诉 tableview 集合视图已加载,它应该重新加载该单元格,而这次不调用 API。但问题是我的collectionview数据每2个tableviewCells重复一次。

我知道 prepareForReuse 应该被覆盖以摆脱单元重用问题。我已经在我的 collectionviewCells 中实现了 prepareForReuse 并将我的 label.text 和 imageView.image 设置为 nil。但是我不确定要为我的 tableviewCell 添加什么到 prepareForReuse 中。

// 表视图类

// TableViewCell 类

// 集合视图单元格

// FeedSection 结构

目前,第 3 个 tableviewCell 重复第 1 个 tablviewCell 的数据。如何避免重复单元格数据?

0 投票
1 回答
85 浏览

swift - 如何从表视图内的集合视图中的按钮获取正确的 indexPath.section?

我在FooterView中设置了一个按钮,它属于一个collectionView,它在一个TableView中。如何从此按钮获取 indexPath.section?

这是一个新的分段控件的选项卡。过去,我尝试将 indexPath.section 分配给 int 变量,甚至将数字分配给常量,在单元格中使用 prepareForReuse 方法来更新单元格,但它总是给我错误的索引。当我滚动时它会改变。

我希望 indexPath.section 保持不变,但是一旦滚动,它就会改变,我无法获得正确的 indexPath.section。

0 投票
0 回答
66 浏览

ios - 具有动态高度的 ReactiveTableViewCell 反对单元重用:如何避免陷入无限循环?

所以这里是我的应用程序不断落入循环的描述:

有一个包含 ReactiveTableViewCell 的 UITableView(但我认为 RX 部分在这里并不重要,所以让我们假设这些是 UITableViewCell)。每个单元格在可展开/可折叠的 UIView上嵌入一个 UITextField (允许我显示与文本字段相关的任何错误消息) - 当没有显示错误时,此子视图是折叠的。

问题是,当 UITableView 滚动并重“错误”单元格时,该单元格的子视图仍处于展开状态。由于 PrepareForReuse() 方法用于在重用之前重置单元格状态,我认为这将是折叠子视图的正确位置,而且确实如此......直到应用程序陷入循环,调整顶部屏幕和底部的大小-永远屏蔽同一个单元格。

你认为我可以如何解决这个问题?也许有没有办法增加单元格重用容忍度,所以 UITableView 一旦从屏幕上消失就不会重用单元格?也许我应该在滚动列表时尝试调整大小锁定,但它总是会留下一些错误余地,所以这不是我正在寻找的修复。

谢谢你的帮助。

编辑 :

好吧,看起来RX部分并不是那么一无所知。我订阅的 IObservable 旨在显示错误消息,它是一个 ReplaySubject。由于这个小家伙,似乎在那里发生了循环,无休止地刷新 UITableView(通过 TV.BeginUpdates/TV.EndUpdates)。所以到目前为止,我认为 ReplaySubject 和 cell-reuse 不能完全正常工作,因为用 BehaviorSubject 进行简单替换可以解决问题。