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

时间:2019-06-11 03:58:57

标签: swift uitableview textbox

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

这3个自定义单元格中的每一个均具有3个文本框,此外,第二个单元格具有2个用于选择性别的按钮,第3个自定义单元格具有一个下拉菜单,该菜单具有在cell1单元格的第一个文本框中键入的任何值

现在的问题是,文本框从用户那里获取了触摸输入(应该如此),并且didselectrowat从未被调用,因此我没有得到indexPath。 但是我需要indexPath,以便可以将每个单元格的用户详细信息插入数组。

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

由于我没有得到indexPath,所以一切都会失败。如何获取indexPath并接触到文本框?

我在想类似函数的功能,该函数可以进行触摸,获取indexPath,然后将控件传递给文本框。

我尝试过的事情。

我在用户触摸单元格之前禁用了文本框(并在用户取消选择单元格后禁用了文本框,因此单元格进行了触摸。一旦didselectrowat被调用,请再次使文本框处于活动状态并使

textbox.becomeFirstResponder()

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

这里似乎是什么问题?我看到了关于同一主题的另一篇文章,我尝试了一下,但不幸的是,它不起作用,而且是用于静态tableview的。

还有一种好的方法吗?除了使用户两次单击该单元格/在文本框外单击之外。

2 个答案:

答案 0 :(得分:1)

您可以将delegate的自定义单元格设置为UITextField,并使用如下所示的回调函数来开始/结束编辑

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
}

答案 1 :(得分:0)

您可以尝试

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

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



        //your code here

    }