关闭UITextField键盘?

时间:2016-07-02 23:51:23

标签: swift

我有多个文本字段

@IBOutlet var emailLogin: UITextField!
@IBOutlet var passLogin: UITextField!
@IBOutlet var emailSignUp: UITextField!
@IBOutlet var passSignUp: UITextField!

截至目前这些并不是真正需要的,因为我通过点击屏幕上的任何位置来解雇它,但是当我按下返回键时我也想让它解雇。

override func viewDidLoad() {
    super.viewDidLoad()
    self.emailLogin.delegate = self
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(LoginViewController.dismissKeyboard))
    view.addGestureRecognizer(tap)
}

第一个问题:当我只需要解雇一个时,我会像这样设置委托,但是当我有多个需要在返回键上被忽略的视图时如何处理呢?

此外,还有两个单独的视图,但都使用相同的类。这是我想要做的问题吗?

从这里

func dismissKeyboard() {

    view.endEditing(true)
}

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

这解除了键盘,但仅限于我设置为自己的文本字段。

感谢任何信息!

编辑: I could be doing this wrong

2 个答案:

答案 0 :(得分:2)

将您的代码更改为以下内容,它应该有效:

@IBOutlet var emailLogin: UITextField?
@IBOutlet var passLogin: UITextField?
@IBOutlet var emailSignUp: UITextField?
@IBOutlet var passSignUp: UITextField?

emailLogin?.delegate = self
passLogin?.delegate = self
emailSignUp?.delegate = self
passSignUp?.delegate = self

当你的LoginViewController加载时,来自其他类的 IBOutlets 没有初始化,因此最终会解包nil个对象,这在Swift中是不允许的。 (您应该能够在Xcode的控制台输出中看到它。)使用可选变量可以防止这种情况发生。

答案 1 :(得分:0)

使用ViewControllerDelegate处理任何textField和textView之外的tap。当你点击textField外面时它会解除键盘。将以下代码放在视图控制器中:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

    super.touchesBegan(touches, withEvent:event)
    self.view.endEditing(true)
}

您现在不需要添加TapGesture来处理此问题。