如何从带有文本框的自定义单元格中获取 didselectrowat?

How to get didselectrowat from a custom cell with textboxes?

我有一个包含 3(cell1,cell2,cell3) 个自定义单元格的动态表格视图,它可以在任何地方重复使用 0 次到 9 次。 (表格视图中的最大单元格将为 27 个单元格)。

这 3 个自定义单元格中的每一个都有 3 个文本框,此外,第二个单元格有 2 个 select 性别按钮,第三个自定义单元格有一个下拉菜单,其中包含输入的任何值cell1 单元格的第一个文本框。

现在的问题是,文本框接受了用户的触摸输入(它应该如此)并且 selectrowat 从未被调用,因此我没有得到 indexPath。 但我需要 indexPath,这样我就可以将每个单元格中的用户详细信息插入到数组中。

(anArray.insert("", at: indexPath)

因为我没有得到 indexPath,一切都失败了。如何获取 indexPath 并触摸文本框?

我在想一些类似函数的东西,它接受触摸,获取 indexPath,然后将控件传递给文本框。

我尝试过的东西。

我在用户触摸单元格之前禁用了文本框(并在用户删除select单元格后禁用了文本框,因此单元格进行了触摸。调用 didselectrowat 后,使再次激活文本框并使

textbox.becomeFirstResponder()

但不知何故,即使断点显示控件通过它并且文本框变为活动状态,文本框也永远不会成为第一响应者。但是没有弹出键盘,如果我再次触摸单元格,会发生相同的过程。

这似乎是什么问题?我看到另一个关于同一主题的 post,我试过了,但不幸的是,它不起作用,它是针对静态表视图的。

请问还有什么好的方法吗?除了让用户点击单元格两次/点击文本框之外..

您可以将 UITextField 的自定义单元格设置为 delegate 并使用回调来编辑 begins/ends,如下所示,

class MyCustomCell: UITableViewCell, UITextFieldDelegate {

    public var editCallback: (() -> Void)?

    /// Set 'textField.delegate = self' on initialization.

    func textFieldDidBeginEditing(_ textField: UITextField) {
         self.editCallback?()
    }
}

并使用 cellForRowAt 中的回调作为,

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = MyCustomCell()
    cell.editCallback = { [weak self] in
        print(indexPath)
    }
    return cell
}

你可以试试这个

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

       tableView.deselectRow(at: indexPath, animated: false)



        //your code here

    }