【问题标题】:Delegate of TextFieldTextField 的代表
【发布时间】:2017-08-18 20:59:42
【问题描述】:

我遇到了一些事情,我无法理解。

在我观看的教程中,讲师按下(cntrl + 单击)委托选项并将其拖到 ViewController 类中。然后,文本字段选项变得像照片一样。查了很多,找到了一个解释,但我不能完全理解。

说明:为了能够使用 UITextFieldDelegate 方法,ViewController 类必须采用该协议。但是,在使用任何方法之前,我们必须选择这个委托选项。

我无法理解这个选项。它有什么好处?

【问题讨论】:

  • 只是为了避免:UIViewController 中的myUITextFieldIBOutlet.delegate = self;。避免“仅”一行,但实际上,有时您甚至不想做@property (nonatomic, weak) IBOutlet *myUITextFieldIBOutlet;,所以您赚了2行。
  • 将 UITextFieldDelegate 协议添加到 Viewcontroller 中,如 ViewController 类:UIViewController, UITextFieldDelegate
  • 我想一个好处是避免忘记设置委托对象。如果您在代码中添加方法但未将 ViewController 设置为委托,则不会调用这些方法。

标签: ios swift


【解决方案1】:

所以为了使用它并理解它,请尝试以下步骤:

1 像这样对你的类采用 UITextFieldDelegate 协议

    class MyViewController: UIViewController, UITextViewDelegate {

2 实现 UITextViewDelegate 的回调方法。例如:

    //MARK: UITextViewDelegate

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        print(textField.text ?? "")
        return true
    }

这些方法用于管理和验证来自 TextView 的文本。 也许你应该阅读一下protocols

或者,如果您不明白为什么要直接从情节提要中设置委托,那是因为这样您就不会在类中声明额外的属性。我会无缝完成,你的课堂上不会有这个:

    @IBOutlet weak var myTextField: UITextField!

    //...
    override func viewDidLoad() {
        super.viewDidLoad()
        myTextField.delegate = self
    } 

【讨论】:

    【解决方案2】:

    首先将委托添加到您的视图控制器 UITextFieldDelegate

    只有这样才能在视图控制器中使用委托函数。

    为了使功能按预期工作, 您必须将文本字段的委托设置为 self。例如 textfield.delegate = self

    将 textfield 的代表设置为 self 是执行讲师所做的相同事情的编程方式(如您所说)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      相关资源
      最近更新 更多