• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - viewDidDisappear 后键盘不消失

[复制链接]
菜鸟教程小白 发表于 2022-12-13 03:40:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

iOS 11.2、Xcode 9.2

我已经尝试了所有方法来关闭旧 UIViewControllerviewDidDisappear 上的键盘 AFTERUIViewController 被插入 UINavigationController 堆栈。但没有运气。

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

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

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

感谢任何帮助!

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

编辑 1.

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

为了重现不良行为:

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

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



Best Answer-推荐答案


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

使用 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
  }

结果:

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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap