gpt4 book ai didi

Swift - UICollectionView reloadItems 花费太长时间

转载 作者:行者123 更新时间:2023-11-30 12:03:33 26 4
gpt4 key购买 nike

我想在用户选择联系人(方法didSelect contact)后仅重新加载单个单元格。如果单元格中的项目数量越来越大,该过程就会变得更慢。我还尝试在 DispatchQueue.main.async { code } 中实现,但仍然需要一些时间来加载。

cellForItemAt 和 noOfItemInSection (AddCell) - 单元格总数 4

var indexPaths = [IndexPath]()

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
indexPaths.append(indexPath)

if indexPath.item == 1 {
let addCell = collectionView.dequeueReusableCell(withReuseIdentifier: CellId, for: indexPath) as! AddCell
addCell.btnAdd.addTarget(self, action: #selector(handleOpenContact), for: .touchUpInside)
addCell.invitees = invitees
return addCell
}
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 4
}

cellForItemAt 和 noOfItemInSection (SubAddCell)

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: subAddId, for: indexPath) as! SubAddCell
cell.delegate = self
cell.invitee = invitees[indexPath.item]
return cell
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return invitees.count
}

didSelect(联系人选择器)

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
let invitee = Invitee()
invitee.name = contact.givenName

if contact.isKeyAvailable(CNContactPhoneNumbersKey) {
for phoneNumber: CNLabeledValue in contact.phoneNumbers {
let a = phoneNumber.value
print("\(a.stringValue)")
invitee.phoneNo = a.stringValue
}
}
self.invitees.append(invitee)

for index in self.indexPaths {
if index == [0, 0] {
print(index)
self.collectionView?.reloadItems(at: [index])
}
}
}

我已经在 cellForItemAt 方法中获取了 indexPaths 的值。如果被邀请者包含 5 个项目,则 print(index) 将打印 19 个值。我不知道为什么。下面是图片。

enter image description here

用户界面设计

enter image description here

如何优化reloadItems?

非常感谢任何帮助。非常感谢。

最佳答案

我认为您在 cellForItemAt 中有这个 indexPaths.append(indexPath) ,这就是为什么索引路径在重新加载数据后会增加。您可以使用 NSSet 而不是 NSArray 来确保您的对象是唯一的。

有了这个:cell.invitee = informes[indexPath.item],您是否为invitee实现了didSet?如果你这样做了,我认为需要先在后台队列中准备数据。例如

DispatchQueue(label: "queue").async {
let image = <# process image here #>
let name = <# process name here #>
DispatchQueue.main.async {
self.imageView.image = image
self.label.text = name
}
}

希望我的建议能帮到你!

关于Swift - UICollectionView reloadItems 花费太长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46923693/

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