UITextField-调用textFieldDidEndEditing为时已晚

时间:2018-12-04 18:50:46

标签: ios swift

我对UITextFieldDelegate的事件顺序有疑问。

我有两个UITableView A和B,分别由两个UIViewController A和B托管,两个UITextField A和B本身由容器托管,每个视图如下(图中省略了单元格):

Layout

Tableview B在其单元格中具有文本字段(func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) { if reason == .committed { ...save content of textfield... } } func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() ...save content of textfield... return true } ),并实现了以下委托函数。

tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

在字段中输入文本后,用户可以按回车键或点击外部的某个位置以保存数据。 只要用户在Viewcontroller B内的某个位置轻按,此功能就起作用。

如果用户点击表视图A中的某个位置,则表视图的

tableView(_:didSelectRowAt:)

函数首先被称为 ,然后才调用文本字段委托。

由于textFieldShouldEndEditing将新数据加载到表视图B中,这显然是一个问题。

我按照建议的here尝试了sendCode(){ axios.post("/test",{ }) .then(res => {this.setState({ userID: res.data.userId, })}) .catch(function (error) { console.log(error); }); } ,但它仍然仅被称为之后 didSelectRowAt

我如何收到用户触发其他事件之前结束编辑字段的事件?

1 个答案:

答案 0 :(得分:2)

我不确定您是否能够修改其当前的默认行为。您可以尝试的一种方法是在ViewController A中的didSelectRowAt(:)方法中:

  1. 通知容器VC有关单元格选择事件

  2. 让容器VC在视图控制器B上调用secondChildVC.view.endEditing()方法,它应该在代码执行从行选择方法(在第一个VC中)返回之前,在文本字段上触发这些事件。 / p>