In my project i use UIPageViewController to swipe between 5 child UIViewController. In some of child view controller, i need to disable the swipe gesture of the UIPageViewCo
You can use this extension:
extension UIPageViewController {
var isPagingEnabled: Bool {
get {
var isEnabled: Bool = true
for view in view.subviews {
if let subView = view as? UIScrollView {
isEnabled = subView.isScrollEnabled
}
}
return isEnabled
}
set {
for view in view.subviews {
if let subView = view as? UIScrollView {
subView.isScrollEnabled = newValue
}
}
}
}
}
and call this:
pageCtrl.isPagingEnabled = false
In your page view controller, add following
override func viewDidLoad(){
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(yourpageviewcontroller.enableSwipe(_:)), name:"enableSwipe", object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(yourpageviewcontroller.disableSwipe(_:)), name:"disableSwipe", object: nil)
}
func disableSwipe(notification: NSNotification){
self.dataSource = nil
}
func enableSwipe(notification: NSNotification){
self.dataSource = self
}
In your child view controller, you can just post notification by following.
NSNotificationCenter.defaultCenter().postNotificationName("enableSwipe", object: nil)
OR
NSNotificationCenter.defaultCenter().postNotificationName("disableSwipe", object: nil)