iOS Swift:将焦点从一个文本域移动到另一个文本域

时间:2015-09-30 23:05:11

标签: ios swift textfield becomefirstresponder

我正在开发一个iOS应用程序,它使用PageViewController来包装几个聊天室"。我在每个页面中都有一个TextField,当我滑动以移动到另一个页面时,我想将焦点从当前页面TextField更改为新页面TextField而不会丢失键盘。

我尝试了不同的方法,但是我不能这样做,每次在新页面中调用becomeFirstResponder时TextField键盘都会关闭,然后立即上升,然后文本字段成为第一个响应者。

你能帮助我吗?

谢谢!

2 个答案:

答案 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)将其置于最顶层。

我刚刚在一个新项目(使用“基于页面的应用程序”模板)中对此进行了测试,并且工作正常。