首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有部分和多个项的IGListKit

具有部分和多个项的IGListKit
EN

Stack Overflow用户
提问于 2017-03-10 00:24:32
回答 1查看 2.8K关注 0票数 0

我正在尝试用IGListKit实现一个集合视图。它可以有一个或三个部分。数据源是实时填充的,因此需要在新数据可用时刷新内容。

为此,我创建了一个符合IGListDiffable的数据源对象,用于表示每个部分:

代码语言:javascript
运行
复制
final class DataSource: NSObject {
  var title: String?
  var items: [SJResult] = []
}

extension DataSource: IGListDiffable {
  public func diffIdentifier() -> NSObjectProtocol {
    return self
  }

  public func isEqual(toDiffableObject object: IGListDiffable?) -> Bool {
    if object === self {
      return true
    }
    guard let obj = object as? DataSource else {
      return false
    }
    return obj.items.count == items.count
  }
}

在每个部分中,我想显示一个items列表。我已经设法通过重用相同的节控制器来创建节,但是我发现插入新结果的唯一方法是在适配器上调用reloadData()。这是非常糟糕的,因为它将重新加载完整的项目列表(可能非常长,>50个项目)。它也不提供动画插入新项目的可能性。我还尝试做一个adapter.performUpdates(animated: true),但没有成功,因为它只刷新我的数据源,而不刷新数据源中的项。

然后,我尝试创建一个区段控制器,它将用一个单元格显示每个区段。单元格将包含一个IGListCollectionView,并将负责显示items,但在这方面我没有运气,尽管第二个部分控制器收到了对象,但它从未显示单元格。

我现在有点纠结,不知道如何才能用IGListKit显示使用相同类型单元格的三个不同的部分,通过让部分是静态的,而让项目是动态的。我正在考虑创建三个IGListCollectionView并在它们之间设置底部/顶部约束,但我对这样做的可能性有一些怀疑。

我想知道是否有人已经遇到了类似的问题和/或IGListKit的家伙是否可以给我一些提示,什么是最好的实现来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2017-03-20 05:09:44

您应该为每个对象返回截面控制器的唯一实例。不要重复使用它们!

另一件要注意的事情是,您使用self作为diff标识符,这意味着对象的实例标识其唯一性。这意味着两个DataSource对象永远不会被比较(obj.items.count == items.count永远不会发生)。不是破坏交易,但要知道这就是它的行为方式。

您可能还想看看IGListBindingSectionController,它获取原始模型并将其分解为视图模型,这些视图模型驱动部分中的每个单元。

更多详细信息和拉取请求中的示例。请注意,如果使用的是CocoaPods,则需要使用master。

https://github.com/Instagram/IGListKit/pull/494

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42700448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档