Swift 如何从自定义 uicollectionviewcell 中获取数据?

Posted

技术标签:

【中文标题】Swift 如何从自定义 uicollectionviewcell 中获取数据?【英文标题】:Swift How can i take data from custom uicollectionviewcell? 【发布时间】:2019-07-26 13:16:46 【问题描述】:

我有一个如下图所示的表单页面。我应该从这种形式中获取价值。我从底部有一个自定义集合视图。我应该从单元格中获取文本字段值。我怎样才能做到这一点?

我在这些单元格中使用选择器视图。你能给我举个小例子吗?

【问题讨论】:

显示您已经尝试过的内容。 【参考方案1】:

问题:“我应该从单元格中获取文本字段值。我该怎么做?”

回答:你不应该那样做。

视图对象用于向用户显示信息和收集输入,而不是用于存储数据。

这对于UICollectionViews 和UITableViews 尤其重要,因为它们都会在用户滚动时根据需要创建和回收单元格。

您应该将您的集合视图设计为具有数据模型对象(通常是结构数组,或用于行和列数据的数组数组)。

当用户在您的文本字段中输入数据并点击返回时,您应该收集更改的值并将它们保存到您的数据模型中。那么您的数据模型始终是最新的,如果您需要获取特定 IndexPath 的值,您只需在模型中查找数据。

【讨论】:

【参考方案2】:

如果您知道单元格的 indexPath,则很简单:

 let indexPath = IndexPath(item: index, section: 0)
 let cell = collectionView.cellForItem(at: indexPath) as? GuestDataCell
 let value = cell?.txtDataValue.text

在 cmets 之后编辑

不是最佳实践,但如果您需要:

var i = 0
var numberOfCells = 4
var values: [String]!

while i < numberOfCells 
   let indexPath = IndexPath(item: index, section: 0)
   let cell = collectionView.cellForItem(at: indexPath) as? GuestDataCell
   let value = cell?.txtDataValue.text
   values.append(value)
   i += 1

但我真的不建议你这样写。请阅读邓肯的回答。

【讨论】:

此解决方案有效。但是“项目:索引”不起作用。当我添加“0 或 1”时它正在工作。 因为“索引”只是您项目的变量。可以是任意整数 我尝试了数组,但它不起作用。我有四个细胞。我如何从每个地方获取数据? 我尝试了您的代码,但索引给了我错误:“无法将 '(Any) -> Int' 类型的值转换为预期的参数类型 'Int'”。顺便说一句,我在我的按钮功能中使用了这段代码。 @objc func handleSaveButton()

以上是关于Swift 如何从自定义 uicollectionviewcell 中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将值从自定义单元格设置/传递到视图控制器

Swift - 从自定义单元格传递数据

SWIFT:从自定义单元格中的 UIswitch 展开/折叠自定义单元格

如何在 iOS swift 中的 ARSCNView 中显示 uicollection 视图

如何从自定义 UITableViewCell 获取值到 ViewController?

swift:从自定义应用程序加载时,iCloud 文档似乎被禁用