默认情况下,UIPageViewController内的InputAccessoryView不显示

时间:2018-07-13 08:09:43

标签: ios swift uipageviewcontroller inputaccessoryview

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

示例如下:

enter image description here

但是,如果我将相同的UIViewController放在UIPageViewController中,则默认情况下不会显示InputAccessoryView。只有在通过单击其他文本框来强制显示键盘时,它才会出现。

此处示例:

enter image description here

此外,如果切换页面,则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默认显示?

谢谢!

2 个答案:

答案 0 :(得分:0)

要使inputAccessoryView出现在ViewController上,您需要将ViewController设置为firstResponder,并且在使用pageViewController时,您需要多个{{ 1}},这意味着您需要在ViewControllers出现在屏幕上时呼叫self.becomeFirstResponder()

您可以在设置ViewController后或在chatInputView中调用它

答案 1 :(得分:0)

唯一需要做的是,当您以某种方式选择一个页面并调用setViewControllers([controllers[0].....)之后,只需要做一个controllers[0].becomeFirstResponder()

就是这样,就像魔术一样,就像没有页面控制器一样。