ios - 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 默认显示?
谢谢!
解决方案
为了让你inputAccessoryView
出现在你的ViewController
身上,你需要将你设置ViewController
为,firstResponder
并且在使用 pageViewController 时你有多个ViewControllers
,这意味着你需要在它出现在屏幕上时调用self.becomeFirstResponder()
你的ViewController
您可以在设置chatInputView
or后调用它viewDidAppear
推荐阅读
- flutter - 有没有办法在 Flutter 中一次动态更改多个按钮的颜色?
- c - FFT:当我通过 ADC 读取音频信号时 .. 是信号的实部还是虚部
- python - 除非从循环外部调用,否则 mainloop 中的 Python Tkinter 变量不会显示
- kotlin - 在忽略大小写的情况下按字母顺序对列表进行排序?
- javascript - 如何在我的 React Form 的构造函数中使用上下文?
- javascript - 为什么 111 试图解析传递副本中的文件?
- java - 垃圾收集器 Java 应用程序不会释放 POD Kubernetes 中的内存
- c# - 如何设置从文本框中打印的份数到 ptinter
- python-3.x - Python - 如何将相等的项分组为两列并在 numpy 矩阵的第三列中添加所有项......使用 pandas 或 numpy?
- c - 如何在不等待换行的情况下在 C 中获取用户输入?