本帖最后由 竹林风 于 2018-12-7 18:18 编辑
文章导航
概述
UINavigationController用来管理视图控制器,在多视图控制器中常用。它以栈的形式管理视图控制器,管理视图控制器个数理论上不受限制(实际受内存限制),push和pop方法来弹入弹出控制器,最多只能显示一个视图控制器,那就是处于栈顶的视图控制器。
一般情况下,UINavigationController最少管理一个控制器,即最少有一个根视图控制器或者叫做栈底视图控制器。当然也有例外,如果不给它添加视图控制器也不会报错,界面上也有视图,因为UINavigationController继承自UIViewController,也有自己的view,只不过默认情况下.view.backgroundColor为nil,即透明的。
常用函数
[Objective-C] 纯文本查看 复制代码 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
使用setViewControllers一次压入多个控制器vc1->vc2->vc3,会显示最后的控制器vc3(处于栈顶),
[Objective-C] 纯文本查看 复制代码 UINavigationController *nav = [[UINavigationController alloc] init];
window.rootViewController = nav;
// 创建3个测试控制器
UIViewController *vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor = [UIColor blueColor];
UIViewController *vc2 = [[UIViewController alloc] init];
vc2.view.backgroundColor = [UIColor redColor];
UIViewController *vc3 = [[UIViewController alloc] init];
vc3.view.backgroundColor = [UIColor greenColor];
// 最终会显示vc3
[nav setViewControllers:@[vc1,vc2,vc3] animated:YES];
当一个控制器被pop后,控制器内存就被释放了(会调用deinit/dealloc函数):
[Objective-C] 纯文本查看 复制代码 - (UIViewController *)popViewControllerAnimated:(BOOL)animated;
一层一层的返回不方便,可以直接回到指定的控制器VC_A(处与VC_A与栈顶之间的控制器全被释放),下面代码执行后,VC_A处于栈顶:
[Objective-C] 纯文本查看 复制代码 - (NSArray *)popToViewController:VC_A animated:(BOOL)animated;
回到根控制器(栈底控制器):
[Objective-C] 纯文本查看 复制代码 -(NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
[Objective-C] 纯文本查看 复制代码 /// 当前管理的所有的控制器
@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;
/// 栈顶控制器
@property(nullable, nonatomic,readonly,strong) UIViewController *topViewController;
/// 当前可见的VC,可能是topViewController,也可能是当前topViewController present(modal)出来的VC,总而言之就是可见的VC
@property(nullable, nonatomic,readonly,strong) UIViewController *visibleViewController;
下一篇 系统UIBarButtonItem使用
|