在诸如股票消息应用程序之类的应用程序上,如果您正在与键盘进行对话并显示并滑动以返回对话列表,则当视图被刷掉时,键盘将保持启用状态。
我似乎无法弄清楚如何模仿这种行为,但我已经在其他应用程序中看到它,所以它必须是可能的。
编辑:不确定我理解为什么这会得到挫折。这绝对是一个有效的问题,我在谷歌找不到答案?
编辑2:这是一段关于我正在努力完成的事情的视频https://arxius.io/v/a555c8db与不和谐中的这种行为相比https://arxius.io/v/0bfda09a
答案 0 :(得分:0)
在诸如股票消息应用程序之类的应用程序上,如果您正在与键盘进行对话并显示并轻扫以返回对话列表,则当视图被刷掉时,键盘会保持启用状态。
我实际上并没有看到这种行为,至少在iPhone上的消息应用中是这样。也就是说,只要第一响应者可以接受文本,键盘就应该保持可见。如果要切换到其他视图控制器并保持键盘可见,请确保新视图中的第一个响应者是可编辑的。例如,如果有文本字段,则可以将其设置为第一个响应者。
答案 1 :(得分:0)
因此,在我们讨论任何类型的解决方案之前,让我们准确地了解为什么键盘被解雇。
如您所知,iOS UI适用于基于视图控制器的系统,文本字段最终由某个视图控制器管理。
单击后退按钮时,活动视图控制器将从导航堆栈中释放,因此系统会推断文本字段不再使用,因此将其作为第一个响应者重新分配。
不幸的是,没有内置的方法来改变这种行为,虽然我们可以推测苹果可能会如何做,但我们不知道。
我们拥有的几个选项并不是特别整洁,但是我过去成功的方法是在弹出视图控制器并将其设置为第一响应者之前直接在窗口上创建隐藏文本字段。然后在另一个视图控制器上,文本字段可以从不可见的第一个响应者中删除它。
这并不理想,但这是我想到的唯一技术。
答案 2 :(得分:0)
正确的是,您必须为两个视图提供UITextFiled才能在它们之间一致地传递键盘。但是没有人说这个文本字段必须在屏幕上,或者必须是ViewController视图的一部分。 因此,您所要做的就是将此文本文件放在屏幕外的某个位置,例如作为窗口的子视图,或者导航控制器的视图,使其成为第一响应者,并切换到视图上的文本字段didAppear:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.textField.becomeFirstResponder()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
let fixedView = self.view.window
let fakeTextField = fixedView?.subviews.last as? UITextField ?? UITextField()
fakeTextField.autocapitalizationType = textField.autocapitalizationType
fakeTextField.autocorrectionType = textField.autocorrectionType
fakeTextField.center = CGPoint(x: -100, y: -100)
fixedView?.addSubview(fakeTextField)
fakeTextField.becomeFirstResponder()
}
确保键盘配置相同,否则您将切换它。