iOS:在任意位置禁止UIPageViewController滚
2018-07-25 本文已影响518人
Eternal_Love
这几天遇到了一个有点特殊的业务场景:在特定条件下,禁止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