美文网首页
iOS:在任意位置禁止UIPageViewController滚

iOS:在任意位置禁止UIPageViewController滚

作者: Eternal_Love | 来源:发表于2018-07-25 17:10 被阅读518次

 这几天遇到了一个有点特殊的业务场景:在特定条件下,禁止UIPageViewController的滑动翻页,遗憾的是UIPageViewController并没有提供相关的API接口。

 容易想到的是,将目标UIPageViewController对象的数据源即dataSource置空,这样做可以实现禁止滑动的功能,但是如果稍后想恢复滑动时,就很麻烦了。

 可以换一种思路,既然UIPageViewController是通过滚动实现翻页的,那其持有的子view里必定包含一个UIScrollView的实例,如果找到该实例,再设置其scrollEnabled属性为NO,就可以达到效果。

 为了通用起见,将该功能封装成为了一个简单的类别:UIPageViewController (LHWForbidPageScroll),代码如下:

#import <UIKit/UIKit.h>

@interface UIPageViewController (LHWForbidPageScroll)

- (void)forbidPageScroll;
- (void)recoverPageScroll;

@end
#import "UIPageViewController+LHWForbidPageScroll"

@implementation UIPageViewController (LHWForbidPageScroll)

- (void)forbidPageScroll {
    UIScrollView *scrollView = [self findScrollView];
    scrollView.scrollEnabled = NO;
}

- (void)recoverPageScroll {
    UIScrollView *scrollView = [self findScrollView];
    scrollView.scrollEnabled = YES;
}

- (UIScrollView *)findScrollView {
    UIScrollView *scrollView = nil;
    for(UIView *eachSubviewinself.view.subviews) {
        if([eachSubview isKindOfClass:[UIScrollView class]]) {
            scrollView = (UIScrollView *)eachSubview;
            break;
        }
    }
    return scrollView;
}

@end

相关文章

网友评论

      本文标题:iOS:在任意位置禁止UIPageViewController滚

      本文链接:https://www.haomeiwen.com/subject/fbfmmftx.html