当我按下回车键时会触发keyboardWillShowNotification(仅在我第一次按下时)

时间:2019-04-18 14:04:31

标签: ios swift uikit

我有一个非常奇怪的问题,当我按下回车键时会发生,并且仅在我第一次按下它时才会发生,每次下一次都按预期运行。

我有一个简单的类来管理键盘,它接受了我拒绝委托给班级的文本字段数组,我也注册了键盘通知:

cordova plugin rm cordova-plugin-file-transfer

这些是我的方法,可以简单地打印出文本以用于首次展示:

WITH t1(dat, isoff, runtot) AS (
  SELECT dat, isoff, 0 runtot
  FROM   tab 
  WHERE  DAT = DATE'2017-12-20'
  UNION ALL
  SELECT t2.dat, t2.isoff,  
          case when t2.isoff = 0 then 0 else runtot + t2.isoff end as runtot
  FROM   tab t2, t1
  WHERE  t2.dat = t1.dat + 1
)
SELECT  dat, isoff, runtot
FROM   t1;

DAT                      ISOFF     RUNTOT
------------------- ---------- ----------
20.12.2017 00:00:00          0          0
21.12.2017 00:00:00          0          0
22.12.2017 00:00:00          0          0
23.12.2017 00:00:00          1          1
24.12.2017 00:00:00          1          2
25.12.2017 00:00:00          1          3
26.12.2017 00:00:00          0          0
27.12.2017 00:00:00          0          0
28.12.2017 00:00:00          0          0
29.12.2017 00:00:00          0          0
30.12.2017 00:00:00          1          1

和我的UITextFieldDelegate:

    public init(withTextFields textFields: [UITextField]) {
        super.init()

        guard textFields.count > 0 else { return }
        textFields.forEach{ $0.delegate = self }

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    }

在我的视图控制器中,我有两个文本字段,它们传递给我的班级。 当我点击第一个时,我会看到:

@objc func keyboardWillShow(notification: NSNotification) {
    print("aaaa")
}
@objc func keyboardWillHide(notification: NSNotification) {
    print("bbbb")
}

这是我所期望的。当我按下键盘上的回车键时,问题就会出现:

    public func textFieldDidBeginEditing(_ textField: UITextField) {
        print("111")
    }

    public func textFieldDidEndEditing(_ textField: UITextField) {
        print("222")
    }

    public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        print("333")
        return true
    }

但它仅在我第一次按下时记录它,每隔一次它记录一次: 111 aaa

当我按下回车键时,键盘已经显示在屏幕上了,为什么它再次调用aaa 333 ?我的textFieldShouldReturn为空。

1 个答案:

答案 0 :(得分:0)

尝试在resignFirstResponder()中呼叫view.endEditing(true)和/或textFieldShouldReturn

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

也尝试将UIResponder.keyboardWillHideNotification更改为UIResponder.keyboardDidHideNotification