gpt4 book ai didi

ios - 获取不可见的 CollectionView 单元格

转载 作者:行者123 更新时间:2023-11-29 05:36:01 25 4
gpt4 key购买 nike

简介

I know that this topic has been discussed a lot on StackOverflow and am aware that a Collection View recycles its cells.

However, I have not found a suitable explanation for the problem I describe below.

问题

在我的应用中,我有一个 Collection View ,其中包含多种单元格类型 - 每个单元格在 Collection View 中只存在一次

Collection View 就像一个表单,用户可以在其中输入不同的内容 - 分为几个单元格。

如果我现在向下滚动,第一个单元格将不再不可见。但是,它也不会从 Collection View 中删除,因为如果我滚动回顶部,输入的数据仍然会正确显示。

If a user clicks a button, I am fetching every collection view cell from the collection view and run a validation method on it.

就像下面这样:

let firstCell = myCollectionView.cellForItem(at: IndexPath(row: 0, section: 0)) as! DefaultElementCell // get the cell

firstCell.validateEntries() // validates entries and highlights incorrect fields

如果我现在滚动到 Collection View 的底部(最后一个单元格),我会收到错误“展开可选值时意外发现 nil”。本例中的可选值是 cellForItemAt() 应返回的 Cell。

So, I think that the cell has already been removed but on the other hand the text entered into the fields and everything are still there if I scroll back to the first cell.

我尝试过的:

if let firstCell = myCollectionView.dataSource?.collectionView(self.myCollectionView, cellForItemAt: IndexPath(row: 0, section: 0)) {
print((firstCell as! DefaultElementCell).validateEntries()) // does nothing
}

现在,我不再收到“意外发现 nil”的错误,但 validateEntries() 也不再执行任何操作

有什么方法可以正确获取不可见的 Collection View 单元格或阻止 Collection View 重复使用单元格?如前所述,每种单元格类型仅在 Collection View 中存在一次。

如有任何帮助,我将不胜感激!

最佳答案

您需要创建一个与单元格数量相同大小的数组,然后

var arr = [String]() 

// inside cellForRowAt
cell.textfield.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: UIControl.Event.editingChanged
cell.textfield.tag = indexPath.item

@objc func textFieldDidChange(_ textField: UITextField) {
arr[textfiled.tag] = textfield.text!
}

然后根据 arr 值验证您的输入

关于ios - 获取不可见的 CollectionView 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030441/

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