UIPageViewController防止在滚动时隐藏键盘

时间:2014-05-28 17:27:00

标签: ios objective-c uipageviewcontroller

我有UIPageViewControllerUIViewController,每个UITextField包含UIPageViewController

每当我滑动becomeFirstResponder时,键盘都会自动解除。有没有办法防止这种行为?

在新UITextfield上调用{{1}},但动画不会解决问题。

3 个答案:

答案 0 :(得分:0)

您可以尝试将PageViewController嵌入为其他viewController的ChildViewController。

我相信这样,PageViewController中的导航不会影响键盘。 我不确定是否需要它,但是如果它仍然不起作用,你可以在转换发生时将ParentViewController设置为firstResponder。

答案 1 :(得分:0)

不幸的是,这似乎是由于过渡完成之前实际完成的动画所致, 我能想到的解决方法是 1.虚假 2.在下一个VC中将textFieldShouldEndEditing设置为返回NO或使用bool处理它 3.在动画或下一个VC viewWillAppear

中添加延迟

答案 2 :(得分:0)

setViewControllers上使用UIPageViewController(设置没有滚动的控制器)时,似乎在scrollView到达其最终位置之前调用了完成块。如果这样做,它将解雇第一响应者。

我们找到的解决方案是首先获取滚动视图:

// In UIPageViewController subclass
for subview in self.view.subviews {

    if let scrollV = subview as? UIScrollView {
        scrollV.delegate = self
        self.scrollView = scrollV // Optional, we don't really need it
    }

}

滚动视图位置在其offset是中间控制器的x位置时完成。也就是说,offset将等于视图的长度。

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    if scrollView.contentOffset.x == self.view.width {
        // Transition is 'really' done.
    }
}

此时,您可以发送过渡完成的通知。 我们所做的就是保留一个完成块,并在转换完成后调用它。

创建一个函数,以便控制器可以在其中传递一个块:

func transitionCompleted(completed:(()->())?) {
        self.transitionCompletedBlock = completed
}

转换完成后:

self.transitionCompletedBlock?()

带有键盘的控制器如下所示:

pagerController.transitionCompleted(completed: {
            self.textfield.becomeFirstResponder()
})