获取不可见的CollectionView单元格

时间:2019-07-14 19:21:21

标签: ios swift uicollectionview uikit uicollectionviewcell

简介

  

我知道这个话题已经在StackOverflow和   知道集合视图回收其单元格

     

但是,我没有找到适合我的问题的解释   在下面描述。

问题

在我的应用中,我有一个集合视图,其中具有多种单元格类型-每个单元格仅存在一次

集合视图类似于表单,用户可以在其中输入不同的内容-分成几个单元格。

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

  

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

类似于以下内容:

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

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

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

  

所以,我认为该单元已经被删除,但另一方面   将文本输入字段,然后一切仍然存在   如果我滚动回到第一个单元格。

我尝试过的事情:

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

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

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

我将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

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个值中输入