我有一个非常典型的类似于聊天的屏幕,其中包含一个InputAccessoryView,其中包含一个文本字段。最初加载屏幕时,键盘是隐藏的,因此文本字段位于屏幕底部。当用户点击文本字段时,将显示键盘,并且InputAccessoryView随键盘向上移动。
示例如下:
但是,如果我将相同的UIViewController放在UIPageViewController
中,则默认情况下不会显示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默认显示?
谢谢!
答案 0 :(得分:0)
要使inputAccessoryView
出现在ViewController
上,您需要将ViewController
设置为firstResponder
,并且在使用pageViewController时,您需要多个{{ 1}},这意味着您需要在ViewControllers
出现在屏幕上时呼叫self.becomeFirstResponder()
您可以在设置ViewController
后或在chatInputView
中调用它
答案 1 :(得分:0)
唯一需要做的是,当您以某种方式选择一个页面并调用setViewControllers([controllers[0].....)
之后,只需要做一个controllers[0].becomeFirstResponder()
。
就是这样,就像魔术一样,就像没有页面控制器一样。