gpt4 book ai didi

ios - UIKeyboardWillShow 在第一次使用键盘时调用了两次

转载 作者:行者123 更新时间:2023-12-01 18:41:05 26 4
gpt4 key购买 nike

嘿,我有一个奇怪的问题。我在 viewDidLoad 中像这样注册键盘监听器:

func registerObservers() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

这是一个单 View Controller 测试应用程序。这些观察者未在应用程序的其他任何地方注册。我也没有在 View Controller 之间导航。 keyboardWillAppear处理程序代码如下所示:
func keyboardWillShow(_ notification: Notification) {
guard let keyboardFrame = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {
return
}
guard let keyboardAnimationDuration = notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber else {
return
}
guard let keyboardAnimationCurve = notification.userInfo?[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber else {
return
}
// Animation code
}

keyboardWillShow调用它会将所选行滚动并动画到键盘上方。

当我第一次加载应用程序并点击一个单元格时 keyboardWillShow被调用两次,即 UIKeyboardWillShow已经被解雇了两次。这导致我的动画出现问题,因为这现在也被调用了两次。检查通知中的框架后,第一个通知中的框架似乎不正确,无法使动画正常工作,但第二个通知的框架有效。这只发生在它第一次使用键盘时。如果我点击一个单元格并再次调用键盘 keyboardWillShow只会被调用一次。我在这里做错了什么?为什么它在第一次加载时会触发两次?

最佳答案

关闭页面时删除通知中心。

 override func viewDidDisappear(_ animated: Bool) 
{
NotificationCenter.default.removeObserver(self, selector: #selector(keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, selector: #selector(keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

关于ios - UIKeyboardWillShow 在第一次使用键盘时调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42970870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com