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/41613420/

相关文章:

ios - 如何在 iOS 的 UIWebView 中打开一个链接?

ios - Swift 元类型不一致

ios - 当键盘出现时滚动到 UIScrollView 的最底部(AutoLayout)

ios - UITableView:如何只实现一行与其他行不同

iphone - 如何使用自动布局以编程方式将 UIView 置于现有 UIView 之上?

ios - 来自浏览器的播放列表/音频文件关联不起作用

iphone - 如何组合两个可变数组?

swift - 如何进行Firebase CRUD操作?

iphone - 动态填充 UITableView

ios - 防止表格 View 单元格中的图像重叠