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 中处理(或禁用)拟我表情

在 MessageKit 中 configureAvatarView 无法正常工作

如何使用 MessageKit 创建自定义单元格?

MessageKit:添加的输入栏按钮仅在我发送消息后出现

委托和数据源在 MessageKit Swift IOS 中不起作用