UINavigationController提供了一种管理多个ViewController的方法,那就是导航栈。可以考虑将具有纵向包含关系的多个ViewController使用UINavigationController的导航栈进行管理。
------------------------------------------------------------------------------------------------------------
import UIKit
class MyNavigationController:UINavigationController,UINavigationControllerDelegate {
//由navigationController管理着的那些viewController在即将显示时,调用该函数
func navigationController(_ navigationController:UINavigationController, willShow viewController:UIViewController, animated:Bool){
switch viewController {
caseisViewController1:
print("第1个ViewController1将显示")
caseisViewController2:
print("第2个ViewController2将显示")
default:
print("未知ViewController")
}
print("当前导航栈内ViewController的个数为\(navigationController.viewControllers.count)")
print("当前导航栈顶是\(navigationController.topViewController!)")
}
//由navigationController管理着的那些viewController在显示完成后,调用该函数
func navigationController(_ navigationController:UINavigationController, didShow viewController:UIViewController, animated:Bool){
switch viewController {
caseisViewController1:
print("第1个ViewController1已显示")
caseisViewController2:
print("第2个ViewController2已显示")
default:
print("未知ViewController")
}
print("当前导航栈内ViewController的个数为\(navigationController.viewControllers.count)")
print("当前导航栈顶是\(navigationController.topViewController!)")
}
//这个navigationController委托实例的方法设置navigationController具有的重力感应旋转功能
func navigationControllerSupportedInterfaceOrientations(_ navigationController:UINavigationController) ->UIInterfaceOrientationMask{
//all表示iPhone上这个navigationController具有三个方向的重力感应旋转功能,iPad具有所有4个方向上的重力感应旋转功能
returnUIInterfaceOrientationMask.all
//allButUpsideDown表示只有颠倒竖直方向不具有旋转功能。在iPhone上,allButUpsideDown与all相同
returnUIInterfaceOrientationMask.allButUpsideDown
//landscape表示手机分别向左右两边倒放,屏幕能跟着旋转,但是当手机重新竖立时,屏幕将无法旋转回来
returnUIInterfaceOrientationMask.landscape
//landscapeLeft表示手机向左边倒放,屏幕能跟着旋转,但是当手机重新竖立时,屏幕将无法旋转回
returnUIInterfaceOrientationMask.landscapeLeft
//同上
returnUIInterfaceOrientationMask.landscapeRight
//portrait表示这个navigationController不会跟着屏幕的转动旋转
returnUIInterfaceOrientationMask.portrait
//如果你在Info.plist上只配置了三个方向上的旋转功能,那么这里返回 portraitUpsideDown将会导致程序抛出异常
returnUIInterfaceOrientationMask.portraitUpsideDown
}
//用来设定偏好方向
func navigationControllerPreferredInterfaceOrientationForPresentation(_ navigationController:UINavigationController) ->UIInterfaceOrientation{
//没在测试过,个人猜测是,类似于优酷这类视频app的全屏播放按钮,当按下全屏播放按钮时,app会选择其中一个landscape方向进行播放
returnUIInterfaceOrientation.landscapeLeft
}
//用来设定切换动画
func navigationController(_ navigationController:UINavigationController, interactionControllerFor animationController:UIViewControllerAnimatedTransitioning) ->UIViewControllerInteractiveTransitioning?{
returnnil
}
//这个方法帮助针对特定ViewController跳到另一ViewController时,作出相应操作
func navigationController(_ navigationController:UINavigationController, animationControllerFor operation:UINavigationControllerOperation, from fromVC:UIViewController, to toVC:UIViewController) -> UIViewControllerAnimatedTransitioning?{
switch fromVC{
caseisViewController1where toVCis ViewController2 :
print("从 ViewController1到 ViewController2 ")
caseisViewController2where toVCis ViewController1 :
print("从 ViewController2到 ViewController1 ")
default:
print("未知跳转")
}
returnnil
}
overridefunc viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
}