Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何从带有文本框的自定义单元格中获取didselectrowat?_Swift_Uitableview_Textbox - Fatal编程技术网

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

Swift 如何从带有文本框的自定义单元格中获取didselectrowat?,swift,uitableview,textbox,Swift,Uitableview,Textbox,我有一个带有3个(cell1、cell2、cell3)自定义单元格的动态表视图,可以在任何地方重复使用0到9次。(tableview中的最大单元格数为27个) 这3个自定义单元格中的每一个都有3个文本框,另外第二个单元格有2个按钮选择性别,第三个自定义单元格有一个下拉菜单,其中有在cell1单元格的第一个文本框中键入的值 现在的问题是,textbox从用户那里获取触摸输入(它应该这样做),而didselectrowat从未被调用,因此我没有得到indexPath。 但我需要indexPath,这

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

这3个自定义单元格中的每一个都有3个文本框,另外第二个单元格有2个按钮选择性别,第三个自定义单元格有一个下拉菜单,其中有在cell1单元格的第一个文本框中键入的值

现在的问题是,textbox从用户那里获取触摸输入(它应该这样做),而didselectrowat从未被调用,因此我没有得到indexPath。 但我需要indexPath,这样我就可以将每个单元格中的用户详细信息插入到数组中

(anArray.insert("", at: indexPath)
因为我没有得到什么,一切都失败了。我如何获得indexPath并触摸文本框

我正在考虑一个类似于函数的东西,它接受触摸,获取indexPath,然后将控件传递给textbox

我尝试过的事情

我在用户触摸单元格之前禁用了文本框(并在用户取消选择单元格后禁用文本框,以便单元格进行触摸。调用didselectrowat后,再次激活文本框并使其生效)

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

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


还有一个好方法吗?除了让用户在单元格上单击两次/在文本框外单击..

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

class MyCustomCell: UITableViewCell, UITextFieldDelegate {

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

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

    func textFieldDidBeginEditing(_ textField: UITextField) {
         self.editCallback?()
    }
}
并使用
cellForRowAt
as中的回调

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

    }

什么?!…我选择了indexPath,然后立即取消选择?请阅读问题