我对UITextFieldDelegate
的事件顺序有疑问。
我有两个UITableView
A和B,分别由两个UIViewController
A和B托管,两个UITextField
A和B本身由容器托管,每个视图如下(图中省略了单元格):
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
我如何收到用户触发其他事件之前结束编辑字段的事件?
答案 0 :(得分:2)
我不确定您是否能够修改其当前的默认行为。您可以尝试的一种方法是在ViewController A中的didSelectRowAt(:)方法中:
通知容器VC有关单元格选择事件
让容器VC在视图控制器B上调用secondChildVC.view.endEditing()方法,它应该在代码执行从行选择方法(在第一个VC中)返回之前,在文本字段上触发这些事件。 / p>