MessageKit InputBar 在 ViewController 关闭时被隐藏/删除
Posted
技术标签:
【中文标题】MessageKit InputBar 在 ViewController 关闭时被隐藏/删除【英文标题】:MessageKit InputBar is hidden/removed on ViewController dismissal 【发布时间】:2019-10-04 12:05:06 【问题描述】:我正在使用 MessageKit 3.0.0-swift5
分支进行聊天。
单击消息,我将展示 ViewController。
当 Viewcontroller 被关闭时,我无法访问 InputBar。
有人遇到过这个问题吗?
查看视频here。
代码:
// MessageCellDelegate
func didTapMessage(in cell: MessageCollectionViewCell)
self.showFileInBrowser(withTitle: "", url: fileURL)
func showFileInBrowser(withTitle title: String? = nil, url: URL)
self.fileBrowser = FileBrowserViewController(title: title, url: url)
let navigation = BaseNavigationController(rootViewController: fileBrowser!)
self.present(navigation, animated: true, completion: nil)
// FileBrowserViewController
@objc func closeButtonTapped()
self.dismiss(animated: true, completion: nil)
我也在使用 IQKeyboardManager,但以下解决方案不起作用。
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
IQKeyboardManager.shared().isEnabled = false
override func viewDidDisappear(_ animated: Bool)
super.viewDidDisappear(animated)
IQKeyboardManager.shared().isEnabled = true
【问题讨论】:
【参考方案1】:我在我的应用程序中遇到了同样的问题,它只使用了InputBarViewController
(出于某些原因,我不得不实现自己的聊天,而不是使用 MessageKit)。
因此,如果您尝试显示不是来自当前控制器的模态视图控制器,或者甚至将第一响应者焦点移动到当前 VC 中的另一个 UITextField
(例如搜索字段),则此问题很容易重现。
对我来说,可行的解决方案是在从搜索字段或viewDidAppear
内部(或在您可以确定的其他地方,聊天 UI 再次可见)退出控制权之后,在当前视图控制器实例上调用 becomeFirstResponder
。
附:当UIContextMenu
(单元格中的长触摸)被解雇时,我也遇到了这个问题。解决方案几乎相同。
【讨论】:
【参考方案2】:我认为您必须在呈现下一个 ViewController 之前通过 TextView.resignFirstResponder()
禁用键盘因为问题在 ViewController 呈现时开始
【讨论】:
如果仍有问题,请告诉我以找到解决方案 关闭键盘不起作用。这是非常随机的行为。 我正在使用 JSQ,但同样的问题。 InputToolBar 在呈现原生相机应用程序后消失。调用 resignFirstResponder 什么也没做,因为 ViewController 会在新的 ViewController 出现时退出第一响应者,同时 inputToolBar 会被关闭。【参考方案3】:我之前也遇到过这个问题,但我尝试通过添加以下代码来呈现nextViewController
。希望它会起作用。
nextViewController.modalPresentationStyle = .overCurrentContext
nextViewController.modalTransitionStyle = .coverVertical
【讨论】:
我正在使用 JSQ,但同样的问题。 InputToolBar 在呈现原生相机应用后消失。以上是关于MessageKit InputBar 在 ViewController 关闭时被隐藏/删除的主要内容,如果未能解决你的问题,请参考以下文章
在 inputBarAccessoryView 中按下发送后如何清除 MessageKit inputBar 中的文本
在 InputBarAccessoryView TextField 中处理(或禁用)拟我表情