ios - TableViewController/自定义单元格 - 无法移动到下一个文本字段

标签 ios swift uitableview

我有一个带有自定义单元格的表格 View Controller ,其中包含一个文本字段 - 它基本上是一个表单。

当用户按键盘上的“return”时,我想自动转到下一个文本字段,但由于某种原因我的解决方案不起作用。

在 TableViewController 中,我这样做:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CustomCell
    cell?.box.tag = indexPath.row

在我的自定义表格 View 单元格中,我有
override func awakeFromNib() {
    super.awakeFromNib()
    box.delegate = self
    ...
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if let nextField = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
        nextField.becomeFirstResponder()
    } else {
        textField.resignFirstResponder()
    }
    return true
}

问题是 textField.superview?.viewWithTag(textField.tag+1) 始终为零。我不知道为什么,因为我清楚地设置了标签并将其标记为委托(delegate)。谢谢你。

最佳答案

添加一些清晰度和更多建议有效 @jawadAli 的回答,因为我觉得你还是 iOS 开发的新手。

您正在尝试获取 tableView从文本字段。但是引用 是得不到的。监督 的文本字段。因为 View 层次结构是这样的:

UITableView > UITableViewCell > contentView > 你的文本字段。

View 层次结构中还可以有更多 View ,因此您需要不断遍历父 View 链,直到获得 UITableView . @jawadAli 已经发布了如何获取它的代码。

但总的来说,这是一种不正确的方法。您应该使用 代表团 . IE。当您的单元格辞去第一响应者的职务时,它应该调用一个方法。您的表格 View Controller 将收到该调用。

然后您的 View Controller 必须获取下一个单元格并使其成为第一响应者。

如果这对您没有任何意义,那么我强烈建议您学习委派。它在 iOS 的库中无处不在。

编辑:

使用委托(delegate)的方法。

创建一个协议(protocol),比如说 CellDelegate具有类似 func didFinishDataCapture(forCell: UITableViewCell) 的功能.

该单元格将具有 delegate CellDelegate 类型的属性.

Controller 将符合 CellDelegate并将自己设置为 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中的单元格的代表

现在在您的单元格中,当您完成文本字段(您知道单元格将是文本字段的委托(delegate))时,您调用自己的委托(delegate)函数,即 delegate.didFinishDataCapture(forCell: self) .

在您的 didFinishDataCapture 的实现中在 Controller 中,您将知道哪个单元已完成数据捕获,并可以将逻辑放在下一步做什么。

关于ios - TableViewController/自定义单元格 - 无法移动到下一个文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61946100/

相关文章:

ios - 旧版本中的等效项是什么。当我在旧版本中运行时,该应用程序没有给我一个大的导航栏

ios - 访问 iPhone 绝对像素位置

ios - 返回表格时保持文本单元格的颜色

ios - 具有多个文本字段的 UiTableview 的 ScrollView 显示从一个文本字段到另一个文本字段的复制值

ios - 将数据从 didSelectRowAtIndexPath 传递到另一个 View Controller ios7

iOS 状态栏覆盖 phonegap

ios - 用于保存一些实例的数组或字典?

ios - 如何获取模态呈现 View Controller 的 Root View 高度?

swift - iOS 12.2 中 WebKitLegacy 框架的应用程序崩溃

ios - UITextView 在 iPhone 6+ 中自动改变颜色,这不是必需的