iOS 11.2、Xcode 9.2
我已经尝试了所有方法来关闭旧 UIViewController
的 viewDidDisappear
上的键盘 AFTER 新 UIViewController
被插入 UINavigationController
堆栈。但没有运气。
如果我在 viewWillDisappear
上关闭它 - 它将被关闭,但带有动画 DURING 推送动画。这不是期望的行为。我希望仅当 Controller 不再可见时才关闭旧 UIViewController
的键盘。
行为应该类似于 Telegram 应用中的行为:
在任何带有可见键盘的对话框中按下对手头像,您将被推送到对手的帐户信息。然后,如果您按下后退按钮,您将被重定向回一个对话框。但是键盘已经关闭了。
感谢任何帮助!
附:该问题可能看起来像是重复的,但我未能使其与我找到的解决方案一起使用。
编辑 1.
我创建了一个小的 TEST PROJECT这表示未能实现所需的行为。
为了重现不良行为:
UITextField
或 UITextView
并等待键盘出现。因此 - 初始 View Controller 将在推送/弹出操作后拥有事件键盘。我需要在按下/弹出操作后隐藏键盘。此外,在初始 View Controller 不可见之前不应关闭键盘,应在 viewDidDisappear
操作后关闭键盘。
在某些情况下,没有文本字段是第一响应者,但键盘在屏幕上。在这些情况下,上述方法无法关闭键盘。
使用 textView
的属性:isEditable
。这是一个经过测试的代码:
override func viewWillAppear(_ animated: Bool) {
self.viewTextView.isEditable = false
super.viewWillAppear(animated)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.viewTextView.isEditable = true
}
结果:
来自@iWheelBuy的评论:
Sometimes, text views will have
inputAccessoryView
. The way you do it will make the keyboard disappear, but theinputAccessoryView
will remain... That is why you should also makeinputAccessoryView = nil
orinputAccessoryView = UIView()
when settingisEditable = false
关于ios - viewDidDisappear 后键盘不消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847923/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |