首页 文章

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

提问于
浏览
1

我有一个非常典型的聊天屏幕,其中包含一个包含文本字段的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子类来显示不可用的版本 . 第二个提交被标记为“working”,并且仅将默认的ViewController设置为图像中的ViewController,

在UIPageViewController中放置UIViewController时,是否有任何方法可以默认显示InputAccessoryView?

谢谢!

1 回答

  • 0

    为了让 inputAccessoryView 显示在你的 ViewController 上,你需要将你的 ViewController 设置为 firstResponder ,当你使用pageViewController时你有多个 ViewControllers ,这意味着你需要在 ViewController 上调用 self.becomeFirstResponder() ,只要它在屏幕上变成

    您可以在设置 chatInputViewviewDidAppear 后调用它

相关问题