多控制器
控制器A 管理3个控制器B、C、D 控制器A 为父控制器 控制器B、C、D 为子控制器
UINavigationController
- 初始化
UINavigationController - 设置
UIWindow 的 rootViewController 为UINavigationController - 将第一个视图控制器设置为
UINavigationController 的根视图控制器 - 通过
push 方法新建子控制器 - 通过
pop 方法可以返回到上一个控制器
UIWindowScene *windowScene = (UIWindowScene*)scene;
self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
self.window.frame = windowScene.coordinateSpace.bounds;
UINavigationController *nav = [[UINavigationController alloc]init];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
RedViewController *redVC = [[RedViewController alloc]init];
[nav pushViewController:redVC animated:YES];
基本使用(跳转)
设置UINavigationController 的RootViewController 为redVC
UIWindowScene *windowScene = (UIWindowScene*)scene;
self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
self.window.frame = windowScene.coordinateSpace.bounds;
RedViewController *redVC = [RedViewController new];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:redVC];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
redVC 的控制器加跳转
- (IBAction)Touch:(id)sender {
BlueViewController *blueVC = [[BlueViewController alloc]init];
[self.navigationController pushViewController:blueVC animated:YES];
}
注意事项
- 创建控制器的同时指定其根控制器
- 获取导航控制器
self.navigationController ,能获取到最近的导航控制器 pop 能返回上一级,或者指定的控制器(必须存在在栈内的),或者根控制器UINavigationController 有导航控制器栈
NSArray *array = UINavigationController.viewControllers;
UIViewController *vc = array[1];
[self.navigationController popToViewController:vc animated:YES];
代码设置导航栏的title
self.navigationItem.title = @"test";
UIButton *addBtn = [UIButton buttonWithType:UIButtonTypeContactAdd];
self.navigationItem.titleView = addBtn;
代码设置导航栏的按钮
- 设置左侧按钮(类型必须为
UIBarButtonItem ) - 右侧同理
UIBarButtonItem *addBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:nil];
self.navigationItem.leftBarButtonItem = addBtn;
self.navigationItem.leftBarButtonItems = @[addBtn2,addBtn1];
self.navigationItem.backBarButtonItem.title = @"测试";
- 当控制器不是根控制器,左侧放置按钮就替代返回按钮了,需要自己设置返回功能
建议storyboard使用导航控制器
较为简单,不展示了
- 点击
ViewControler -> editor -> embed in -> UINavigationController 可以将ViewControler 嵌套一个UINavigationController - 页面的
BackButton 修改的是下一页的返回按钮
Segue传值
UIStoryboardSegue 是Storyboard 拖线产生的连接线UIStoryboardSegue 的属性 Identifier :标记 source :源控制器 destination :目标控制器
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
**可以根据segue的Identifier属性做判断**
**或者根据class来判断**
UIViewController *VC = segue.destinationViewController;
VC.navigationItem.title = @"随便改";
}
- 手动型
Segue :controller 连线到controller ,需要设置Identifier
[self performSegueWithIdentifier:@"标识" sender:nil];
- 自动型
Segue :按钮连线到controller ,无需验证
注意事项
跟换启动的storyboard 文件需要修改改info 文件的该属性
|