UIPageViewController 中的 InputAccessoryView 默认不显示
Posted
技术标签:
【中文标题】UIPageViewController 中的 InputAccessoryView 默认不显示【英文标题】:InputAccessoryView inside a UIPageViewController doesn't show by default 【发布时间】:2018-07-13 08:09:42 【问题描述】:我有一个非常典型的类似聊天的屏幕,其中包含一个文本字段的 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 默认显示?
谢谢!
【问题讨论】:
你发现了吗? 【参考方案1】:为了让inputAccessoryView
出现在您的ViewController
上,您需要将您的ViewController
设置为firstResponder
,并且在使用pageViewController 时您有多个ViewControllers
,这意味着您需要调用self.becomeFirstResponder()
在你的ViewController
上,只要它出现在屏幕上
您可以在设置chatInputView
或viewDidAppear
后调用它
【讨论】:
【参考方案2】:唯一需要做的就是当你以某种方式选择一个页面并调用setViewControllers([controllers[0].....)
,之后,你只需要做一个controllers[0].becomeFirstResponder()
。
就是这样,像魔术一样工作,就像没有页面控制器一样。
【讨论】:
【参考方案3】:在视图控制器中:
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
DispatchQueue.main.async
self.becomeFirstResponder()
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
resignFirstResponder()
【讨论】:
以上是关于UIPageViewController 中的 InputAccessoryView 默认不显示的主要内容,如果未能解决你的问题,请参考以下文章
uipageviewcontroller 中的 Swift uipageviewcontroller
NavigationController 中的 UIPageViewController
UIPageViewController 中的 UIScrollView 滚动了多少?