showViewController
2022-06-16 本文已影响0人
大刘
Created by 大刘 liuxing8807@126.com
iOS 8 引入了两种新的方式来显示一个视图控制器:
func showViewController(_ vc: UIViewController, sender sender: AnyObject?)
func showDetailViewController(_ vc: UIViewController, sender sender: AnyObject?)
这两个方法智能判断当前的显示环境来决定如何显示,iOS 8 想统一显示视图控制器的方式,不过引入这两个方法增加了使用的复杂性:
ViewController | NavigationController | TabBarController | |
---|---|---|---|
showViewController:sender: | Presentation | Push | Presentation(by self) |
showDetailViewController:sender: | Presentation | Presentation(by self) | Presentation(by self) |
UINavigationController 重写了showViewController:sender:
而执行 push 操作,上面的by self
意思是用容器 VC 本身而非其下子 VC 去执行 presentation。这两个方法的行为可以通过重写来改变。
当非容器类 VC 内嵌在这两种容器 VC 里时,会通过最近的容器 VC 来执行:
VC in NavigationController | VC in TabBarController | |
---|---|---|
showViewController:sender: | Push(by NavigationController) | Presentation(by TabBarController) |
showDetailViewController:sender: | Presentation(by NavigationController) | Presentation(by TabBarController) |