ios - viewDidDisappear 后键盘不会消失

标签 ios uiview uiviewcontroller first-responder uiresponder

iOS 11.2、Xcode 9.2

我已经尝试了所有方法来在旧UIViewControllerAFTERUIViewControllerviewDidDisappear上关闭键盘> 被插入 UINavigationController 堆栈中。但运气不好。

如果我在 viewWillDisappear 上关闭它 - 它将被关闭,但带有动画 DURING 推送动画。这不是期望的行为。我希望仅当 Controller 不再可见时才关闭旧的 UIViewController 键盘。

行为应该类似于 Telegram 应用程序中的行为:

在任何带有可见键盘的对话框中,按对手的头像,您将被推送到对手的帐户信息。然后,如果您按后退按钮,您将被重定向回对话框。但键盘已经消失了。

感谢任何帮助!

附注该问题可能看起来像重复的问题,但我未能使其与我找到的解决方案一起工作。

编辑 1。

我创建了一个小TEST PROJECT这代表未能实现所需的行为。

为了重现不良行为:

  • 启动应用。
  • 点击 UITextFieldUITextView 并等待键盘出现。
  • 点击“下一步”按钮并等待新 Controller 被按下。
  • 点击“返回”按钮并等待新 Controller 弹出。

因此 - 初始 View Controller 在推/弹出操作后将具有事件键盘。我需要在按下/弹出操作后隐藏键盘。此外,在初始 View Controller 变得不可见之前不应关闭键盘,而应在 viewDidDisappear 操作之后关闭键盘。

最佳答案

在某些情况下,没有文本字段是第一响应者,但键盘在屏幕上。在这些情况下,上述方法无法关闭键盘。

使用 textViewisEditable 属性。这是经过测试的代码:

  override func viewWillAppear(_ animated: Bool) {
    self.viewTextView.isEditable = false
    super.viewWillAppear(animated)
  }

  override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.viewTextView.isEditable = true
  }

结果:

enter image description here

来自@iWheelBuy的评论:

Sometimes, text views will have inputAccessoryView. The way you do it will make the keyboard disappear, but the inputAccessoryView will remain... That is why you should also make inputAccessoryView = nil or inputAccessoryView = UIView() when setting isEditable = false

关于ios - viewDidDisappear 后键盘不会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847923/

相关文章:

iOS:勾勒出部分透明图像的不透明部分

uiview - 如何在仍在使用功能时更新显示(使用 MonoTouch/Xamarin 的 iOS)

ios - Swift ios 只隐藏 UIView 或者也隐藏 UIView 里面的元素

ios - 从 AppDelegate 内部执行 pushViewController

ios - TextView 在填充后在 iOS 中丢失样式

ios - 调整 collectionView.scrollToItem 考虑 inset?

ios - 为什么我在 Storyboard (Xcode) 中所做的更改没有反射(reflect)在我的应用程序上?

ios - 我的 View 的渐变阴影?

swift - 具有显示关系的导航 Controller

ios - UIViewController 自定义过渡卡在 iOS13 上