У меня есть приложение с реализацией UIPageViewController, с 14 ViewControllers, и мне нужно, чтобы отключить навигацию до анимации конца, но по умолчанию, я могу коснуться или салфетки, чтобы изменить вид ...Отключить навигации UIPageViewController
Edit:
PageViewController.swift
import UIKit
class PageViewController: UIViewController, UIPageViewControllerDataSource {
var contentPageRestorationIDs = [String]()
var pageViewController = UIPageViewController()
override func viewDidLoad() {
super.viewDidLoad()
contentPageRestorationIDs = ["FirstView", "SecondView", "ThirdView", "FourthView", "FiveView", "SixView", "SevenView", "EightView", "NineView", "TenView", "ElevenView", "TwelveView", "ThirteenView", "FourteenView"]
// Do any additional setup after loading the view, typically from a nib.
pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as UIPageViewController
pageViewController.dataSource = self
var startingController: UIViewController = self.viewControllerAtIndex(0)!
pageViewController.setViewControllers([startingController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
self.addChildViewController(self.pageViewController)
self.view.addSubview(self.pageViewController.view)
self.pageViewController.didMoveToParentViewController(self)
}
func goToPreviousContentViewController(){
var currentViewController: AnyObject = self.pageViewController.viewControllers[0]
var vcRestorationID = currentViewController.restorationIdentifier
var index = find(contentPageRestorationIDs, vcRestorationID!!)
var previousViewController: UIViewController = self.viewControllerAtIndex(index! - 1)!
pageViewController.setViewControllers([previousViewController], direction: UIPageViewControllerNavigationDirection.Reverse, animated: false, completion: nil)
}
func goToNextContentViewController(){
var currentViewController: AnyObject = self.pageViewController.viewControllers[0]
var vcRestorationID = currentViewController.restorationIdentifier
var index = find(contentPageRestorationIDs, vcRestorationID!!)
var nextViewController: BaseContentViewController = self.viewControllerAtIndex(index! - 1)!
pageViewController.setViewControllers([nextViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> (UIViewController?){
var vcRestorationID = viewController.restorationIdentifier
var index = find(contentPageRestorationIDs, vcRestorationID!)
if(index == 0){
return nil
}
return viewControllerAtIndex(index! - 1)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> (UIViewController?){
var vcRestorationID = viewController.restorationIdentifier
var index = find(contentPageRestorationIDs, vcRestorationID!)
if(index == contentPageRestorationIDs.count - 1){
return nil
}
return viewControllerAtIndex(index! + 1)
}
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> (Int){
return self.contentPageRestorationIDs.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> (Int){
return 0
}
func viewControllerAtIndex(index: Int)-> (BaseContentViewController!) {
if(index >= contentPageRestorationIDs.count){
return nil
}
var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType))
var contentViewController: BaseContentViewController = storyboard.instantiateViewControllerWithIdentifier(self.contentPageRestorationIDs[index]) as BaseContentViewController
contentViewController.rootViewController = self
contentViewController.loadView()
return contentViewController
}
}
BaseContentViewController.swift (Все мои ViewControllers простирается от этого)
import UIKit
class BaseContentViewController: UIViewController {
var rootViewController: PageViewController = PageViewController()
var goNext = Bool()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Попробуйте настройки страницы контроллера представления 'dataSource' до нуля, до анимации завершил, а затем снова установил его, как только вы счастливы для продолжения навигации. В документах: «Методы источника данных вызывается в ответ на навигацию на основе жестов. Если значение этого свойства равно nil, тогда навигация с помощью жестов отключается». – pbasdf
Спасибо, но, как я могу изменить dataSource из ViewController ??? – PlugInBoy
Я думаю, что я бы выполнил обратный вызов протокола/делегата с ViewController на контроллер просмотра страницы. В контроллере просмотра определите протокол с помощью таких методов, как «enableNavigation» и «disableNavigation», и свойство делегата, которое принимает этот протокол. В ПВХ установите свойство delegate 'self' при создании ViewControllers и реализуйте эти два метода для установки/очистки источника данных. – pbasdf