9

我有一个viewController继承自UIPageViewController( @interface PageScrollViewController : UIPageViewController) 现在我想知道如何启用和禁用滚动UIPageViewController?当使用 aUIScrollView你会做setScrollEnabled:NO并且 self.view.userInteractionEnabled = NO;不是一个选项,因为这会阻止整个UIView而不是仅仅滚动。

编辑 这是在PageScrollViewController : UIPageViewController课堂上:

if ([[notification name] isEqualToString:@"NotificationDisable"]){
    NSLog (@"Successfully received the disable notification!");
    for (UIGestureRecognizer *recognizer in self.gestureRecognizers) {
        recognizer.enabled = NO;
    }
}
4

5 回答 5

12

或者你可以在你的 PagingVC 中强制禁用分页:

self.delegate = nil;
self.dataSource = nil;

并再次启用它:

self.delegate = self;
self.dataSource = self;
于 2016-06-17T08:22:40.770 回答
10

尝试循环gestureRecognizersUIPageViewController禁用/启用它们:

for (UIGestureRecognizer *recognizer in pageViewController.gestureRecognizers) {        
        recognizer.enabled = NO;
}

注意:正如在这个 SO post中发现的那样,这种方法只适用于UIPageViewControllerTransitionStylePageCurl. 您可能想尝试此解决方案(尽管它似乎有点 hacky)。

 for recognizer in pageViewController.gestureRecognizers {
    recognizer.isEnabled = false
}
于 2013-04-05T08:34:29.670 回答
8

我做了以下事情(我有一个持有 UIPageViewController 的控制器)。

self.pageController.view.userInteractionEnabled = NO;

当您想要启用滑动或滚动时,只需启用用户交互即可。

于 2015-07-13T16:06:42.380 回答
3

设置 UIPageViewControllerdataSource属性以nil防止滚动,因为页面视图控制器无法确定要转换到的“下一个”视图控制器。

self.dataSource = nil // scrolling disabled

self.dataSource = self // scrolling enabled
于 2018-01-18T08:51:05.210 回答
3

UIPageViewController内部管理UIScrollView以完成工作。我们可以找出UIScrollView并更新它的isScrollEnabled属性。

let view = myPageViewController.view
for subview in view.subviews {
    if let scrollview = subview as? UIScrollView {
        scrollview.isScrollEnabled = false
        break
    }
}

或者使用这个UIPageViewController扩展。

extension UIPageViewController {

    var scrollView: UIScrollView {
        for subview in view.subviews {
            if let scrollview = subview as? UIScrollView {
                return scrollview
            }
        }
        fatalError()
    }
    
    var isScrollEnabled: Bool {
        get {
            return scrollView.isScrollEnabled
        }
        set {
            scrollView.isScrollEnabled = newValue
        }
    }
}
于 2020-09-15T07:44:11.147 回答