我正在开发一个iOS应用程序,它使用PageViewController来包装几个聊天室"。我在每个页面中都有一个TextField,当我滑动以移动到另一个页面时,我想将焦点从当前页面TextField更改为新页面TextField而不会丢失键盘。
我尝试了不同的方法,但是我不能这样做,每次在新页面中调用becomeFirstResponder时TextField键盘都会关闭,然后立即上升,然后文本字段成为第一个响应者。
你能帮助我吗?
谢谢!
答案 0 :(得分:2)
我能找到解决这个问题的方法:
在每页中使用变量
var firstResponderIsLocked: Bool = false
检查TextField是否应该结束编辑
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
return !firstResponderIsLocked
}
当我在页面之间滑动时处理它:
func pageViewController(pageViewController: UIPageViewController, willTransitionToViewControllers pendingViewControllers: [UIViewController]) {
if let viewControllerToShow = pendingViewControllers[0] as? LiveMessagingPageContentViewController {
pendingViewControllerIndex = viewControllerToShow.index
lockFirstResponder(pendingViewControllerIndex!)
}
}
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if completed && pendingViewControllerIndex != nil {
takeFirstResponder(pendingViewControllerIndex!)
}
pendingViewControllerIndex = nil
}
我根据需要让我的应用工作。
答案 1 :(得分:1)
将文本字段放在页面视图控制器的视图中,而不是放在每个子页面上。在页面视图控制器中,调用self.view.bringSubviewToFront(textField)
将其置于最顶层。
我刚刚在一个新项目(使用“基于页面的应用程序”模板)中对此进行了测试,并且工作正常。