按 Return 触发 UITextField unwind segue: Why/How 这行得通吗?
Triggering a UITextField unwind segue by pressing Return: Why/How does this work?
在我当前的项目中,我发现如果我还添加了处理 didEndOnExit 事件的操作,我可以向 UITextField 添加展开转场并通过按 return 键触发转场。如果 didEndOnExit 处理程序未连接到事件,则不会触发 segue。
我想了解这种行为。我的兴趣源于我可能会学到一些关于 segues 如何运作的东西。另一方面,该行为可能只是 UITextFields 所独有的。
This 简单的 GitHub 项目演示了行为。
感谢您的关注。
您做了一件非常不寻常的事情:您将触发的转场附加到文本字段,作为其动作转场。所以问题很简单:这是什么意思?特别是,是什么触发了附加到文本字段的触发转场?文本字段的 "action" 是什么?
我的意思是,我们 知道 是什么触发了附加到按钮的触发 segue:用户点击按钮。我们知道是什么触发了附加到 table 视图单元格的触发转场:用户选择了单元格。但是文本字段呢?用户必须做什么才能触发其操作 segue?
"unwind" 业务是一个转移注意力的问题,所以让我们从我们的想法中消除它。从第二个视图控制器中删除文本字段并将其放入 first 视图控制器中。将文本字段的动作转场作为模式转场挂接到第二个视图控制器。
现在考虑第一个视图控制器中的文本字段。它的行为如您所述:
如果我们在文本字段中单击并键入并点击 return,什么也不会发生。
如果我们将 Did End On Exit 添加到文本字段并键入并点击 return,键盘将消失,我们继续。
嗯,想想第一个要点中的短语 "nothing happens"。键盘没有被解雇!但是关闭键盘 是 文本字段的 "action"。没有任何动作。所以没有触发动作segue。
现在试试这个实验:让视图控制器成为文本字段的委托,并实现这个方法:
extension ViewController : UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
在文本字段中键入并点击 Return。键盘被关闭 ,我们继续 到下一个视图控制器。关闭键盘以响应 Return 键 是 文本字段的操作。
所以你看,从某种意义上说,unwind segue 和 DidEndOnExit 都是转移注意力的东西,因为我只是完成了同样的事情而没有使用它们中的任何一个。重要的是文本字段的 Action 是什么,以及作为响应触发其 Action Segue。
在我当前的项目中,我发现如果我还添加了处理 didEndOnExit 事件的操作,我可以向 UITextField 添加展开转场并通过按 return 键触发转场。如果 didEndOnExit 处理程序未连接到事件,则不会触发 segue。
我想了解这种行为。我的兴趣源于我可能会学到一些关于 segues 如何运作的东西。另一方面,该行为可能只是 UITextFields 所独有的。
This 简单的 GitHub 项目演示了行为。
感谢您的关注。
您做了一件非常不寻常的事情:您将触发的转场附加到文本字段,作为其动作转场。所以问题很简单:这是什么意思?特别是,是什么触发了附加到文本字段的触发转场?文本字段的 "action" 是什么?
我的意思是,我们 知道 是什么触发了附加到按钮的触发 segue:用户点击按钮。我们知道是什么触发了附加到 table 视图单元格的触发转场:用户选择了单元格。但是文本字段呢?用户必须做什么才能触发其操作 segue?
"unwind" 业务是一个转移注意力的问题,所以让我们从我们的想法中消除它。从第二个视图控制器中删除文本字段并将其放入 first 视图控制器中。将文本字段的动作转场作为模式转场挂接到第二个视图控制器。
现在考虑第一个视图控制器中的文本字段。它的行为如您所述:
如果我们在文本字段中单击并键入并点击 return,什么也不会发生。
如果我们将 Did End On Exit 添加到文本字段并键入并点击 return,键盘将消失,我们继续。
嗯,想想第一个要点中的短语 "nothing happens"。键盘没有被解雇!但是关闭键盘 是 文本字段的 "action"。没有任何动作。所以没有触发动作segue。
现在试试这个实验:让视图控制器成为文本字段的委托,并实现这个方法:
extension ViewController : UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
在文本字段中键入并点击 Return。键盘被关闭 ,我们继续 到下一个视图控制器。关闭键盘以响应 Return 键 是 文本字段的操作。
所以你看,从某种意义上说,unwind segue 和 DidEndOnExit 都是转移注意力的东西,因为我只是完成了同样的事情而没有使用它们中的任何一个。重要的是文本字段的 Action 是什么,以及作为响应触发其 Action Segue。