【问题标题】:UITextField values inside UICollectionView cell in swiftswift中UICollectionView单元格内的UITextField值
【发布时间】:2015-09-11 13:19:16
【问题描述】:

我在 UICollectionView 单元格中有 UITextField 和 ImageView。它从 Web 服务加载数据。用户可以在文本字段中输入数据并且必须提交它。我的问题是,当我滚动集合视图时,单元格中一个文本字段中输入的值与另一个单元格中的其他文本字段值混淆,并且显示错误值。

我的步骤(假设我有单元格 A、B、.......、k)

1.输入值

Cell A Textfield= 12
Cell B Textfield= 13

2.向下滚动

(我没有在单元格 F 的文本字段中输入任何内容,虽然它显示的是 13)

3.回滚到我输入值的地方

Cell A Textfield= 12
Cell B Textfield= (blank)

【问题讨论】:

    标签: ios iphone swift uicollectionview


    【解决方案1】:

    您可以通过将UITextField 的值保存在一个数组中来解决这个问题。每当您向UITextField 输入值并关闭键盘时,然后将该值保存到数组中相同单元格索引值的数组中,并且当您滚动collectionView 时,文本字段值应该从数组中输入并且它不会错位值。

    【讨论】:

    • 只是为了让没有太多经验的人更清楚: 1. 在 UICollectionCell 类中,创建一个变量,指向包含数组的 UIViewController 或 UICollectionViewController。创建一个包含单元格索引的变量。您必须在方法 cellForItemAt 中实例化两者。然后,在 UITextField 上创建一个操作,更新事件上的数组 (self.collectionview.array[index] = 12)(例如退出编辑)
    【解决方案2】:

    UICollectionViewUITableView 在滚动时重复使用少数单元格对象。这有助于内存管理。这也意味着当您在单元格上填充一个文本字段时,该文本字段的单元格将在您滚动时重复用于不同的行,因此如果您不重置文本字段的内容,您将看到相同的数据显示对于错误的行。

    解决方案是您的“事实来源”(又名模型)必须始终与您的 UI 分开。因此,当用户在文本字段中键入内容时,您的模型(可能是字符串数组?)应该相应地更新。然后当用户滚动时,您必须使用tableView:cellForRowAtIndexPath:collectionView:cellForItemAtIndexPath: 方法用适当的数据填充单元格。如果没有数据,您必须清除任何可能从另一行的单元格被重复使用的行中遗留下来的数据。

    您必须处理单元重用的其他机会包括UITableViewDelegate 上的willDisplayCellForRowAtIndexPath 方法或UITableViewCell 上的prepareForReuse。集合视图对象也有相应的方法。

    【讨论】:

      【解决方案3】:

      据我所知,我认为问题在于,您不是每次都更新值 - cellForRowAtIndexPath 函数在滚动时被调用。

      func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

      要解决此问题,您需要做的是“您必须将您输入的所有值存储在单元格的 textField 中,并且每当为 UITableView 调用上述 datasource 方法时,相应地更新单元格”。

      【讨论】:

        猜你喜欢
        • 2014-07-29
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 2014-11-04
        • 1970-01-01
        • 2021-05-07
        • 2017-09-26
        • 1970-01-01
        相关资源
        最近更新 更多