首页 > 解决方案 > UIPageViewController 中的 InputAccessoryView 默认不显示

问题描述

我有一个非常典型的类似聊天的屏幕,其中包含一个文本字段的 InputAccessoryView。最初加载屏幕时,键盘是隐藏的,因此文本字段位于屏幕底部。当用户点击文本字段时,键盘会显示并且 InputAccessoryView 会随着键盘向上移动。

此处显示了一个示例:

在此处输入图像描述

但是,如果我将相同的 UIViewController 放在 aUIPageViewController中,则 InputAccessoryView 默认不会出现。只有在通过点击不同的文本框强制出现键盘时才会出现。

这里的例子:

在此处输入图像描述

此外,如果切换页面,则InputAccessoryView再次消失。

设置 InputAccessoryView 的代码如下所示:

class ViewController: UIViewController {

    var chatInputView: ChatInputView?

    override var canBecomeFirstResponder: Bool {
        return true
    }

    override var inputAccessoryView: UIView? {
        return self.chatInputView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        let chatInputView = ChatInputView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 124))
        chatInputView.awakeFromNib()
        self.chatInputView = chatInputView
    }

InputAccessoryView 是通过 XIB 文件创建的,但非常标准。

所有代码都可以在https://github.com/SuperTango/InputAccessoryView中找到

有两个提交。第一次提交被标记为“not_working”,并通过将默认 ViewController 设置为 UIPageViewController 子类来显示不工作的版本。第二次提交标记为“工作”,并且仅将默认 ViewController 设置为图像中的 ViewController,

将 UIViewController 放入 UIPageViewController 时,有什么方法可以让 InputAccessoryView 默认显示?

谢谢!

标签: iosswiftuipageviewcontrollerinputaccessoryview

解决方案


为了让你inputAccessoryView出现在你的ViewController身上,你需要将你设置ViewController为,firstResponder并且在使用 pageViewController 时你有多个ViewControllers,这意味着你需要在它出现在屏幕上时调用self.becomeFirstResponder()你的ViewController

您可以在设置chatInputViewor后调用它viewDidAppear


推荐阅读