我可以通过标签获取UICollectionViewCell吗?

3

我有一些NSNotifications,并且希望根据与它们相关的标签更新我的单元格。

这是否可行?

更具体地说,我在我的UITableViewCell中有一个UILabel和一个UIProgressView,如果通知对象包含匹配的标签,我将要更新它们。

我正在后台同步数据,每次处理一块数据时都会发送一个NSNotification。

我希望UICollectionView单元格反映最新的状态。

为了实现这一点,我想通过标签获取UITableViewCell,然后使用新数据更新UILabel和UIProgressView。


你能详细说明一下吗?你有任何现成的代码吗? - MrHaze
使用tag可能不是一个明智的选择。更加谨慎的做法可能是包含一些标识符,让您的模型能够用来识别受影响的单元格,然后让观察者将其转换为NSIndexPath并查看该单元格当前是否可见。但是,如果没有关于您的模型的更多信息,我们很难进一步给出建议。 - Rob
2个回答

4
  1. 不要通过标签获取单元格,而是通过indexPath获取。
  2. 不要通过indexPath获取单元格。
  3. 不要获取它们。

(1) 您可以通过标签获取视图,但每次绘制时都需要更新视图标签以匹配其索引路径。因此(2)索引路径同样好用。但是(3)它们也不好用,因为直接调整单元格不是我们在MVC中的做法。

正确的方法是更新您的模型(在MVC术语中,特别是集合视图数据源数组)以反映世界的变化,然后告诉集合视图它已过时(reloadData是大锤子,reloadItemsAtIndexPaths:是手术刀)。

这意味着您的模型必须包含反映下载进度状态的数据(例如浮点数),该数据可用作进度条参数,并且您的cellForItem...方法必须检查此值并修改单元格的进度视图。


他不知道要重新加载哪些索引路径。 - MrHaze
@MrHaze - 这并不清楚从OP中。OP肯定可以并且应该能够将下载过程映射到相应的数据源对象。这也是标签和indexPaths的前提条件。 - danh
当然,我不反对,但是如果你只有一个对单元格标记的引用,那么仅凭这个是无法获取索引路径的。 - MrHaze
正确的@MrHaze,我只是让我的UICollectionView单元格响应通知,看看我的性能如何。 当十个单元格检查通知是否匹配时,似乎很无聊,因为很可能不会匹配。 - Slee
@Slee - 常见的模式是将属性附加到NSNotification(参见userInfo),该属性描述了关心通知的数据源的模型部分。如果集合显示了来自许多URL的下载,则通知用户信息将包含更改进度的特定URL。收到通知后,视图控制器的工作是在数据源中查找模型对象的索引,更新其进度(也是模型的一部分),并在相应的indexPath处重新加载。 - danh

1
由于单元格会重复使用,因此您无法这样做。如果您使用标签进行包装,这并不比重新加载单元格更容易。如果要实现此目的,您应该更新您的模型,然后重新加载已更新的单元格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接