我有一个实现了UIPageViewController的应用程序,有14 ViewControllers,我需要禁用导航,直到动画完成,但默认情况下,我可以触摸或滑动来更改视图...
编辑:
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.
}
}发布于 2015-03-24 00:44:29
您可以根据自己的需求尝试以下选项
推荐
self.navigationItem.leftBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.enabled = NO;或者简单地禁用on Edge case
self.view.window.userInteractionEnabled = NO;更新:最近苹果不允许后退按钮启用/禁用。取而代之的是我们可以隐藏它。
self.navigationItem.hidesBackButton = YES;发布于 2015-03-24 00:48:34
通常,最好不要阻止用户使用UI,并且可能会终止动画。
显然,这在您的用例中是不可能的。您可以在应用程序中创建标志,指示是否可以显示下一个控制器,并在viewControllerAfterViewController中创建逻辑以防止显示下一个控制器。
发布于 2015-03-24 01:55:11
我希望我把你的问题都回答对了
navigationController?.navigationBar.hidden = true然后在动画结束后再播放一次
navigationController?.navigationBar.hidden = falsehttps://stackoverflow.com/questions/29215451
复制相似问题