繁体   English   中英

获取不可见的CollectionView单元格

[英]Get CollectionView cells that are invisible

介绍

我知道这个话题已经在StackOverflow上进行了很多讨论,并且知道Collection View会回收其单元格

但是,对于下面描述的问题,我找不到合适的解释。

问题

在我的应用程序中,我有一个包含多个单元格类型的集合视图-每个单元格在集合视图中仅存在一次

集合视图的行为就像一种形式 ,用户可以在其中输入不同的内容-分为几个单元格。

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

如果用户单击一个按钮,我将从集合视图中获取每个集合视图单元格,并在其上运行验证方法。

就像下面这样:

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

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

如果现在滚动到集合视图的底部 (最后一个单元格),则会收到错误消息“在展开可选值时意外发现nil” 在这种情况下,可选值是cellForItemAt()返回的Cell。

因此,我认为该单元格已被删除,但另一方面,文本已输入到字段中,如果我滚动回到第一个单元格,则所有内容仍然存在。

我试过的

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

现在,我不再收到错误“意外发现nil”,但validateEntries()也不再起作用。

有什么方法可以正确获取不可见的收集视图单元格或防止收集视图重复使用单元格? 如前所述,每个单元格类型在集合视图中仅存在一次。

我将不胜感激任何帮助!

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

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值验证您的输入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM