为什么没有调用textFieldShouldReturn函数?

GJZ*_*GJZ 13 keyboard swift

textFieldShouldReturn根本没有调用该函数:没有错误,但键盘根本没有响应.

我的情况与按下返回键时如何在swift中隐藏键盘不同在我的情况下,根本没有发生任何事情,其他情况都在Objective-C中.

这是我的代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var textField: UITextField!

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        resignFirstResponder()
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

textField是我的故事板上文本字段的出口.我也试过self.endEditing而不是resignFirstResponder.

nhg*_*rif 35

这个答案的其余部分仍然非常有用,我会把它留在那里因为它可以帮助其他的问题......但是在这里,我错过了这个具体例子的明显问题......

我们没有打电话resignFirstResponder给文本字段.我们在视图控制器上调用它.我们需要在文本字段中调用它,因此请将代码修改为如下所示:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}
Run Code Online (Sandbox Code Playgroud)

A UITextField只会textFieldShouldReturn在作为其委托的对象上调用该属性.

我们可以通过添加一个viewDidLoad方法来以编程方式解决此问题:

override func viewDidLoad() {
    super.viewDidLoad()
    self.textField.delegate = self
}
Run Code Online (Sandbox Code Playgroud)

但我们也可以在构建时通过故事板进行设置.

右键单击文本字段以检查代理是否已设置:

在此输入图像描述

如果旁边的那个圆圈delegate未填充,我们还没有为我们设置委托UITextField.

要设置代理,请将鼠标悬停在此圈子上.它将变为加号.现在单击并拖动到要委派文本字段的视图控制器(文本字段所属的视图控制器).

在此输入图像描述

当您将视图控制器作为委托适当地挂钩时,此菜单应如下所示:

在此输入图像描述


Jor*_*oon 6

如果使用 Swift 3+,则必须在第一个属性之前添加下划线。喜欢:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}
Run Code Online (Sandbox Code Playgroud)

这在 Apple 文档中也有很好的记录。 https://developer.apple.com/documentation/uikit/uitextfielddelegate/1619603-textfieldshouldreturn


小智 5

我注册了 Swift 4 Udemy 课程,讲师说除了 Cntrl 之外还要为 ViewController 添加 UITextFieldDelegate 类 - 从 textField 拖动到 ViewController 按钮并选择委托。

导入 UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)