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