gpt4 book ai didi

ios - 具有部分和多个项目的 IGListKit

转载 作者:行者123 更新时间:2023-11-28 15:48:11 46 4
gpt4 key购买 nike

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

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

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
}
}

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

然后我尝试创建一个部分 Controller ,它将用一个单元格显示每个部分。该单元格将包含一个 IGListCollectionView 并将负责显示 items,但我没有运气,尽管第二部分 Controller 接收到它从未显示的对象细胞。

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

我想知道是否有人遇到过类似的问题和/或来自 IGListKit 的人是否可以给我一些提示,说明解决该问题的最佳实现是什么?

最佳答案

您应该为每个对象返回您的部分 Controller 的唯一实例。不要重复使用它们!

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

您可能还想看看 IGListBindingSectionController,它采用您的原始模型并将其分解为驱动该部分中每个单元格的 View 模型。

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

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

关于ios - 具有部分和多个项目的 IGListKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42700448/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com