手机网站 优化,房屋备案信息查询入口,搭建本地wordpress,中国建筑装饰设计网IOS 导航控制器分为多层级导航控制器naviagtionController 和平行分栏控制器 UITabBar#xff08;底部切换栏#xff09;。IOS导航控制器是什么呢#xff1f;其实就是我们web的路由切换功能#xff0c;只不过在app开发切换是ViewController。 什么是导航控制器 NavigationC… IOS 导航控制器分为多层级导航控制器naviagtionController 和平行分栏控制器 UITabBar底部切换栏。IOS导航控制器是什么呢其实就是我们web的路由切换功能只不过在app开发切换是ViewController。 什么是导航控制器 NavigationController ?
NavigationController 是继承ViewController实现的我们可以理解为一个具有切换视图并保存视图栈记录的一个视图控制器在开发中我们应该如何使用呢那么NavigationController 是一个ViewController 说明我们可以把APP根视图替换成NavigationController进行路由。下面我们进行简单代码示例
1. 首先修改SceneDeletgate自定义UIWindow和跟视图实现导航控制器
自定义UIWindow我们需要对info.plist修改一下配置具体参考之前写的 Xcode11 后Appdelegate自定义UIWindow对象
// SceneDeletegate.m
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {self.window [[UIWindow alloc] initWithWindowScene:(UIWindowScene* )scene];self.window.frame CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);// 初始化第一级视图UIViewController* ROOTVC [[ViewController alloc] init];// 初始化层级导航控制器UINavigationController* ROOTNavigation [[UINavigationController alloc]initWithRootViewController:ROOTVC];self.window.rootViewController ROOTNavigation;// 显示[self.window makeKeyAndVisible];
}修改一下第一级视图的代码
ViewController.m
- (void)viewDidLoad {[super viewDidLoad];// 设置导航栏的颜色self.navigationController.navigationBar.barTintColor [UIColor whiteColor];// 设置导航栏文字颜色self.navigationController.navigationBar.tintColor [UIColor grayColor];// 修改本视图的导航标题self.navigationItem.title 首页;self.view.backgroundColor [UIColor grayColor];
}效果 可以看到上ViewController代码self.navigationItem进行配置标题、self.navigationController配置颜色风格等。 self.navigationController 是什么
每个视图控制器UIViewController都具有navigationController属性这个属性指向是当前视图的导航控制器对象也是当前导航控制器下视图都是指向它其中一个UIViewController修改了NaviagtionConrtoller的属性其他视图层的导航控制器也会发生变化的。
self.navigationItem 是什么
navigationItem属性其实是每个视图的导航栏配置项可以单独配置当前的视图的导航的标题、左右两边按钮、颜色、风格等只在当前视图层激活时候才生效。
如何切换视图 pushViewController
我们可以通过调用NavigationController的方法进行视图切换下面简单演示一下视图切换功能。
// ViewController.m
- (void)viewDidLoad {[super viewDidLoad];// 设置导航栏的颜色self.navigationController.navigationBar.barTintColor [UIColor whiteColor];// 设置导航栏文字颜色self.navigationController.navigationBar.tintColor [UIColor grayColor];// 修改本视图的导航标题self.navigationItem.title 首页;self.view.backgroundColor [UIColor grayColor];UIButton* _btn [MyUI createButton:跳转];_btn.frame CGMakeRect(100, 100, 40, 100);[_btn addTarget:self action:selector(go:) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:_btn];}- (void) go {UIViewController* view [[UIViewController alloc] init][self.navigationController pushViewController:view animated:YES];
}通过点击我们看到路由发生了切换和后退等功能。
UINavigationController 属性
名称类型说明默认值topViewControllerUIViewController栈堆中的顶层视图控制器visibleViewControllerUIViewController返回当前激活即显示的视图控制器如果不存在激活的视图则返回栈堆中顶层的视图控制器viewControllersNSArray__kindof UIViewController *当前导航控制器的视图栈堆[]navigationBarHiddenBOOL隐藏导航栏NOnavigationBarUINavigationBar导航控制器的导航栏对象UINavigationBartoolbarHiddenBOOL隐藏工具栏YEStoolbarUIToolbar导航控制器工具栏对象UIToolbar
UINavigationController 方法 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 是否开启动画切换视图并且压入导航栈堆。 - (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated; 从栈堆弹出当前视图。并且返回剩余的视图栈堆 - (nullable NSArray__kindof UIViewController * *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated 弹出视图栈堆直到指定的视图控制器前面 - (nullable NSArray__kindof UIViewController * *)popToRootViewControllerAnimated:(BOOL)animated 直接恢复到顶级视图层。 - (void)setViewControllers:(NSArrayUIViewController * *)viewControllers animated:(BOOL)animated API_AVAILABLE(ios(3.0)) 直接设置新的视图栈堆会跟当前顶级视图状态和新的视图栈堆来执行后退还是前进。 - (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated 隐藏导航栏 - (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated隐藏工具栏
…后续补充更多内容