【问题标题】:How does self.textField.delegate = self work in swift?self.textField.delegate = self 如何快速工作?
【发布时间】:2016-07-30 15:00:52
【问题描述】:

我正在使用 iPhone 应用程序开发中的键盘辞职功能。我想知道为什么

self.textField.delegate = self 

需要包含在 viewController 的 viewDidLoad 中。我试图找出原因,但到目前为止还没有解释清楚。

【问题讨论】:

  • 我知道代理。无法理解它与这里的关系?
  • 如果你想让控制器成为你的文本字段的代表,你会怎么做?
  • self 在这里不一定指控制器。是吗?
  • 如果代码在视图控制器源码中,是的
  • 为了使用像sjould这样的委托方法,我们需要开始编辑,所有我们需要sepicify textfiled,delegate = self

标签: ios swift swift2


【解决方案1】:

几点

  1. 您需要设置委托的原因是因为没有它,视图不知道视图控制器。所以它不会知道你的方法textFieldDidEndEditing,它永远不会被调用。

  2. 这是委托的基本前提,你是在告诉那个对象,“这是一个我想让你调用方法的对象”

  3. viewDidLoad 中没有必须设置 - 但它通常是设置视图代表最方便的地方。

  4. 1234563逻辑不在一处,因此可以更改。

【讨论】:

  • 完美。正是我想要的。
【解决方案2】:

UITextFieldDelegate 协议定义了用于管理 UITextField 对象中文本的编辑和验证的方法。该协议的所有方法都是可选的。

文本字段调用其委托的方法以响应重要更改。您可以使用这些方法来验证用户键入的文本、响应与键盘的特定交互以及控制整个编辑过程。在文本字段成为第一响应者并显示键盘(或其分配的输入视图)之前不久开始编辑。

来自more info. check apple doc.

如果您不想管理 UITextField 对象中文本的编辑和验证,则不必使用self.textField.delegate = self,因为UITextFieldDelegate 的所有方法都是可选的。

对于您的其他问题,例如 .delegate = self 做了什么?

当您“设置委托”时,您所做的就是说明您希望消息去往何处。

因此,

blah.delegate = AmazingPlace 会将消息发送到“amazingPlace”。

blah.delegate =somewhereElse 将消息发送到“somewhereElse”。

blah.delegate = self 会将消息发送给您。

...检查这个source link for details

【讨论】:

    【解决方案3】:

    如前所述,UITextfield 委托允许您控制文本字段上的事件。 您将能够编辑诸如

    之类的函数
    textFieldShoulEndEditing
    

    textFieldDidEndEditing
    

    为了添加自定义规则,例如:文本验证。

    看看Apple doc

    如果你不需要它,你可以在你的类声明中删除这行和 UITextfieldDelegate。

    【讨论】:

    • 仍然没有回答问题。我确实知道我们可以使用 textFieldDelegate 实现的功能。我的问题完全不同:self.textField.delegate = self 服务的目的是什么?
    • 正在激活委托
    • 为什么会自己激活?为什么它必须在 viewDidLoad 中?
    • 这一行说:这个类实例(self)将能够覆盖 UITextfield 函数。 ViewDidLoad 用于在视图加载后调用您想要的函数。花时间了解视图生命周期。
    【解决方案4】:

    委托是 iOS 开发中的关键概念,因此我建议您仔细查看 documentation 。在某些情况下创建自己的自定义委托也特别有用,因此在正确的地方理解和使用它们可以真正帮助改进项目的结构。

    使用它们有几个关键原因。首先,它们允许类之间的安全通信。在您的示例中,您使用的 textField 对象正在与您的视图控制器进行通信。这就是为什么您需要将视图控制器设置为其委托。否则,文本字段没有可与之通信的委托对象(您的视图控制器)。文本字段在特定时间触发特定方法,例如textFieldDidBeginEditing,并在其委托对象上调用这些方法(如果有的话)。当您将视图控制器注册为文本视图的委托时,您可以利用这些回调。

    另一个好处是委托允许您分离关注点并封装或抽象职责。可能文本视图的主要关注点是如何处理其视图中的文本,但不一定在输入时要做什么,或者当按下键盘上的返回按钮时,或者如何验证已输入的文本.最好将这些任务交给其他人,例如委托(在 Obj-C 用语中),这就是为什么在您的示例中您必须将一个类注册为另一个类的委托。

    【讨论】:

      【解决方案5】:

      您需要在代码中使用self.textField.delegate = self 设置 UITextField 的委托 或使用class MyViewController: UITextFieldDelegate 使您的视图控制器(或任何其他类)成为委托通过将控件从文本字段拖动到视图控制器来在情节提要中设置 UITextField 的委托。

      【讨论】:

      • 我的问题是,为什么我需要它而不是如何添加。
      • 是的,我现在明白了。
      猜你喜欢
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2012-04-27
      • 1970-01-01
      相关资源
      最近更新 更多