禁用/启用UIPageViewController中的滚动

时间:2013-04-05 08:27:04

标签: iphone ios objective-c

我有viewController继承自UIPageViewController@interface PageScrollViewController : UIPageViewController)现在我想知道如何启用和禁用UIPageViewController的滚动?使用UIScrollView时,您会setScrollEnabled:NOself.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;
    }
}

5 个答案:

答案 0 :(得分:10)

尝试循环gestureRecognizers的{​​{1}}并禁用/启用它们:

UIPageViewController

注意:如this SO post中所述,此方法仅适用于for (UIGestureRecognizer *recognizer in pageViewController.gestureRecognizers) { recognizer.enabled = NO; } 。您可能想尝试this solution(虽然看起来有点笨拙)。

答案 1 :(得分:9)

或者您可以在PagingVC中进行转换以禁用分页:

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

再次启用它:

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

答案 2 :(得分:8)

我做了以下事情(我有一个控制器,它拥有UIPageViewController)。

self.pageController.view.userInteractionEnabled = NO;

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

答案 3 :(得分:1)

将UIPageViewController dataSource属性设置为nil会阻止滚动,因为页面视图控制器无法确定" next"查看控制器转换为。

self.dataSource = nil // scrolling disabled

self.dataSource = self // scrolling enabled

答案 4 :(得分:0)

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
        }
    }
}