【问题标题】:Triggering a UITextField unwind segue by pressing Return: Why/How does this work?通过按 Return 触发 UITextField 展开 segue:为什么/如何工作?
【发布时间】:2017-11-14 15:41:22
【问题描述】:

在我当前的项目中,我发现如果我还添加了处理 didEndOnExit 事件的操作,我可以向 UITextField 添加展开转场并通过按返回键触发转场。如果 didEndOnExit 处理程序未连接到事件,则不会触发 segue。

我想了解这种行为。我的兴趣源于可能有一些东西可以让我了解 segues 是如何运作的。另一方面,这种行为可能只是 UITextFields 独有的。

This 简单的 GitHub 项目演示了该行为。

感谢您的关注。

【问题讨论】:

  • 我想再说一遍(正如我在回应您对另一个问题的评论时所说的那样),这是一个非常好的问题。感谢您的精心准备。

标签: ios11


【解决方案1】:

您做了一件非常不寻常的事情:您将一个触发的转场附加到一个文本字段,作为它的动作转场。所以问题很简单:这是什么意思?特别是,是什么触发了附加到文本字段的触发 segue?文本字段的“动作”是什么?

我的意思是,我们知道是什么触发了附加到按钮的触发 segue:即用户点击按钮。我们知道是什么触发了附加到表格视图单元格的触发转场:用户选择了单元格。但是文本字段呢?用户必须做什么才能触发其动作转场?

“放松”业务是一条红鲱鱼,所以让我们从我们的想法中消除它。从第二个视图控制器中删除文本字段并将其放在 first 视图控制器中。将文本字段的动作转场作为模态转场连接到第二个视图控制器。

现在考虑第一个视图控制器中的文本字段。它的行为与您描述的一样:

  • 如果我们在文本字段中单击并键入并回车,则不会发生任何事情。

  • 如果我们将 Did End On Exit 添加到文本字段并键入并按回车键,则键盘将关闭并继续。

好吧,想想第一个要点中的“什么都没有发生”这句话。键盘没有关闭!但是解除键盘文本字段的“动作”。没有任何动作。所以没有触发动作转场。

现在试试这个实验:让视图控制器成为文本字段的委托,并实现这个方法:

extension ViewController : UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}

在文本字段中输入并按回车键。键盘被解除并且我们继续到下一个视图控制器。关闭键盘以响应 Return 键文本字段的操作。

所以你看,从某种意义上说,unwind segue 和 DidEndOnExit 都是红鲱鱼,因为我只是在没有其中任何一个的情况下完成了同样的事情。重要的是文本字段的 Action 是什么,以及作为响应触发其 Action Segue。

【讨论】:

  • 感谢您的出色回答。正如我所希望的那样,我确实学到了一些东西。我的收获是:控件(按钮、文本字段等)能够产生“动作”。如果/当该动作产生时,任何附加到控件的 segue 都会被触发。
  • 正确的世界。您必须知道相应的“动作”实际上是什么,才能知道用户必须做什么才能触发动作转场。 — 正如我所说,配置从文本字段发出的动作转场是非常罕见的。我不认为我曾经做过或听说过有人这样做。但这当然是合法的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 2020-03-20
相关资源
最近更新 更多