gpt4 book ai didi

ios - UIKeyboardDidShow 触发太频繁?

转载 作者:搜寻专家 更新时间:2023-11-01 07:01:36 24 4
gpt4 key购买 nike

为了在用户键盘的正上方显示文本字段,我在我的自定义 View Controller 中覆盖了 inputAccessoryView
我还通过覆盖 canBecomeFirstResponder(并返回 true)并在 viewWillAppear() 中调用 self.becomeFirstResponder() 确保 View Controller 可以成为第一响应者

现在,当我在我的 View Controller 中将一些消息显示为 UICollectionViewCells 时,我想在键盘出现时向下滚动。所以我在 viewDidLoad() 中添加了一个通知:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: Notification.Name.UIKeyboardDidShow, object: nil)

keyboardDidShow() 然后调用滚动函数:

@objc private final func scrollToLastMessage() {
// ('messages' holds all messages, one cell represents a message.)
guard messages.count > 0 else { return }
let indexPath = IndexPath(item: self.messages.count - 1, section: 0)
self.collectionView?.scrollToItem(at: indexPath, at: .bottom, animated: true)
}

确实,通过在 Xcode 中设置断点,我发现该函数是在键盘出现后触发的。但此外,它还会在我辞去第一响应者之后触发(例如,通过按下返回键 [我辞去第一响应者并在 textFieldShouldReturn 中返回 true ])并且键盘消失了。尽管我认为它不应该:正如 Apple 文档所说:

Posted immediately after the display of the keyboard.

访问 View Controller 时也会触发通知,因此在主视图出现后单击(自定义的)UICollectionViewCell(单元格没有任何可编辑的内容,只有静态标签或 ImageView ,因此键盘甚至不应该出现)。

要提供更多信息:我几乎遵循了 Youtube 上的这个教程:https://www.youtube.com/watch?v=ky7YRh01by8

最佳答案

UIKeyboardDidShow 通知可能比您预期的更频繁地发布,而不仅仅是在它最初出现时。例如,当框架在可见后发生变化时,将发布 UIKeyboardDidShow

不过,您可以通过在 userInfo 字典中检查键盘的结束框架来了解键盘是否真正可见。这将告诉您它在屏幕上的大小和位置,然后您可以使用这些信息来确定如何在您的用户界面中做出最佳 react 。

关于ios - UIKeyboardDidShow 触发太频繁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50899153/

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