ios - 如何在编辑表格 View 单元格中的文本字段时重新加载所有表格 View 单元格 - iOS Swift

标签 ios swift uitableview

为清楚起见,我有一个 UIView Controller,其顶 View 包含一个 textfield。我还有一个 tableview 下面的每一行都包含 1 个 textfield

问题:当我 "didEndEditing" 任何文本字段时,这意味着顶部 View 中的文本字段和 tableview 中的文本字段我想将此信息保存到核心数据并重新加载 表格 View

这非常有效,除了!当我选择一个文本字段(任何地方)时输入一个值,然后从一个文本字段中选择,选择另一个文本字段。这会导致键盘卡住,永远不会消失。

我已经诊断出这是因为当 "DidEndEditing" 被调用时,由于正在重新加载单元格,我失去了对我刚刚选择的文本字段(谁的键盘打开)的引用。

有没有人遇到过这个?有没有人找到一个优雅的解决方案来将数据重新加载到 tableview 单元格,同时选择其中的 textfield

编辑:我尝试将 reloadData() 移动到文本字段的 "DidBeginEditing" 函数,并成功让选择指示器出现,但键盘再次出现没有引用,即使我在 tableView.relaodData()

之后调用 become first responder

最佳答案

我会完全避免重新加载表格 View ,这样您就不会打扰文本的第一响应者状态。您可以 (1) 仅插入和删除更改的内容,或者 (2) 重新装饰需要更新的单元格。

1。插入和删除

因此,与其调用 myTableView.reloadData(),不如找出需要添加或删除的索引路径并调用适当的方法。

myTableView.insertRows(at: newIndexPaths, with: .automatic)
myTableView.deleteRows(at: oldIndexPaths, with: .automatic)

2。重新装修

这需要一种更加模块化的方法来处理单元格出队的方式。而不是这样做:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)
    cell.data = dataArray[indexPath.row]
    return cell
}

这样做:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)
    decorate(cell, at: indexPath)
    return cell
}

func decorate(_ cell: UITableViewCell, at indexPath: IndexPath) {
    cell.data = dataArray[indexPath.row]
}

以后您可以重新装饰,即更新单元格的内容和配置,而无需重新加载和打扰第一响应者状态:

for cell in myTableView.visibleCells {
    if let indexPath = myTableView.indexPath(for: cell) {
        decorate(cell: cell, at: indexPath)
    }
}

关于ios - 如何在编辑表格 View 单元格中的文本字段时重新加载所有表格 View 单元格 - iOS Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41582238/

相关文章:

ios - 在iOS中绘制可变宽度的路径

ios - ionic anchor 滚动不适用于 iOS

ios - 使用 webview 显示托管在 URL 上的直播 channel

ios - 如何让 UIImageView 填充 UITableViewCell?

ios - 在导航项中隐藏返回文本

ios - 使用GPUImage在OpenGL ES着色器中具有 boolean 返回类型的函数

swift - 无法下载使用 AVFoundation 的 apple-music

ios - JSON访问数组内的多个实例

ios - 原型(prototype)单元 - 元素的可访问性顺序

swift - 当我尝试将 "Font"应用于一个 tableview 单元格时,它会在滚动 tableview 时自动应用于其他单元格