问题标签 [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.
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 个问题
- 如果不在里面
prepareForReuse
,那么我在哪里将currentTime
anddata
属性重置为nil
和imageView's image
tonil
?这是假设应用程序被发送到后台并且currentTime
属性设置为某个值。 - 如果我不能将标签的文本设置为 nil in
prepareForReuse
那么为什么最好将 AVPlayerLayer 设置为 nil inprepareForReuse
?
表视图单元格:
cellForRowAtIndexPath:
ios - iOS UICollectionView 与垂直 UICollectionView 单元格内的水平滚动重用
滚动带有水平集合视图的垂直集合单元格时出现性能问题。原因是单元格的数据重用 - 在每个父单元重用周期上重新加载水平集合视图。有谁知道我怎样才能避免这么多的重新加载?
ios - 在 UITableView 中重用单元格
我有我的自定义单元格“NewsCell”。它包含我的自定义视图“ImageMosaicView”(这只是 UIView 的子类)。我用它来显示像 Facebook 帖子中的照片。我只是将图像的网址传递给 ImageMosaicView 的实例,然后它会加载并显示。
我有一个问题。当我快速滚动 tableView 时,前一个单元格中的图像会在新单元格中出现片刻,同时正在加载新图像。但我不知道它们是如何出现在那里的,因为我提供了默认图像。这是一个例子
我怎样才能避免这种情况?
ios - 使用 UICollectionView 的转换传递数据
我正在尝试在 Swift 4.1 中使用 Cosmic Mind 的 Material 框架来实现类似 Photo View Collection 的东西。
在传统的 segue 中,我可以做这样的事情来将数据从 1 个 VC 传递到另一个,
我看到的负责交换视图控制器的唯一代码行是这样的,
如何传递与准备 segue 相同的数据。是否有任何委托方法可以实现以获得该功能?
ios - UICollectionView | 细胞可重复使用
所以,UICollectionView
现在对我来说真的很痛苦。考虑我有UIViewController
一个UICollectionView
嵌入其中的。好吧,CollectionView 的每个单元格几乎都是UIViewController
. 每个单元格都包含一些按钮和图像。当我选择一个按钮并倾向于使按钮保持其状态时,CollectionView 会重用该单元格,并且还会在其他单元格中复制单元格状态。但是,当我尝试将单元格放入数组中并且想要检查该数组中单元格的状态时,该cellForItemAt
方法会覆盖这些单元格。我感到很困惑。请帮忙。即使prepareForReuse
在UICollectionViewCell
没有帮助。这是一些代码:
任何帮助都非常感谢。
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 的数据。如何避免重复单元格数据?
swift - 如何从表视图内的集合视图中的按钮获取正确的 indexPath.section?
我在FooterView中设置了一个按钮,它属于一个collectionView,它在一个TableView中。如何从此按钮获取 indexPath.section?
这是一个新的分段控件的选项卡。过去,我尝试将 indexPath.section 分配给 int 变量,甚至将数字分配给常量,在单元格中使用 prepareForReuse 方法来更新单元格,但它总是给我错误的索引。当我滚动时它会改变。
我希望 indexPath.section 保持不变,但是一旦滚动,它就会改变,我无法获得正确的 indexPath.section。
ios - 具有动态高度的 ReactiveTableViewCell 反对单元重用:如何避免陷入无限循环?
所以这里是我的应用程序不断落入循环的描述:
有一个包含 ReactiveTableViewCell 的 UITableView(但我认为 RX 部分在这里并不重要,所以让我们假设这些是 UITableViewCell)。每个单元格在可展开/可折叠的 UIView上嵌入一个 UITextField (允许我显示与文本字段相关的任何错误消息) - 当没有显示错误时,此子视图是折叠的。
问题是,当 UITableView 滚动并重用“错误”单元格时,该单元格的子视图仍处于展开状态。由于 PrepareForReuse() 方法用于在重用之前重置单元格状态,我认为这将是折叠子视图的正确位置,而且确实如此......直到应用程序陷入循环,调整顶部屏幕和底部的大小-永远屏蔽同一个单元格。
你认为我可以如何解决这个问题?也许有没有办法增加单元格重用容忍度,所以 UITableView 一旦从屏幕上消失就不会重用单元格?也许我应该在滚动列表时尝试调整大小锁定,但它总是会留下一些错误余地,所以这不是我正在寻找的修复。
谢谢你的帮助。
编辑 :
好吧,看起来RX部分并不是那么一无所知。我订阅的 IObservable 旨在显示错误消息,它是一个 ReplaySubject。由于这个小家伙,似乎在那里发生了循环,无休止地刷新 UITableView(通过 TV.BeginUpdates/TV.EndUpdates)。所以到目前为止,我认为 ReplaySubject 和 cell-reuse 不能完全正常工作,因为用 BehaviorSubject 进行简单替换可以解决问题。