NavigetionController(导航栏)
首先,层级关系: leftBarButtonItem、rightBarButtonItem、title都是加在UINavigationItem上的,UINavigationItem再加在NavigationBar上,NavigationBar对应唯一的NavigationController.
创建NavigetionCotroller
NavigetionCotroller的创建需要在AppDelegate.m文件中创建,并且需要设置根视图。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//1.创建一个窗口(UIWindow)
UIWindow * window = [[uiWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
//2.创建一个显示的控制器,
ViewController * vc = [ViewController new];
UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:vc];
//3.将控制器与Window关联
window.rootViewController = controll;
//4.将Window显示出来
[window makeKeyAndVisible];
self.window = window;
return YES;
}
UINavigationBar导航栏样式
UINavigationBar是由UINavigationController管理,他的样式是由子控制器self.navigationltem来设置。
//例如:设置导航栏标题
self.navigationltem.titlt = @"标题";
返回按钮点击事件
1.弹出一个栈
[self.navigationController popViewControllerAnimated:YES];
2.弹出到根栈(根视图)
[self.navigationController popToRootViewControllerAnimated:YES];
3.弹出到指定栈(指定位置),只能向上弹出,不能跳转到子页面。
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
对于navigationBar隐藏的一些设置
尤其是当使用继承自UIScrollView的控件时,有时候经常要针对于navigationBar做出一些设置。
//当tableView等滑动的时候是否隐藏navigationBar。
self.navigationController.hidesBarsOnSwipe = YES ;
//当视图接受点击的时候是否隐藏navigationBar。
self.navigationController.hidesBarsOnTap = YES ;
//当键盘出现的的时候是否隐藏navigationBar。
self.navigationController.hidesBarsWhenKeyboardAppears = YES ;
//当屏幕的方向改变的时候是否隐藏navigationBar。
self.navigationController.hidesBarsWhenVerticallyCompact = YES ;
//当视图被push(就是nav的push)完之后是否隐藏底层的bar。
self.navigationController.hidesBottomBarWhenPushed = YES ;
对于修改navigationController返回按钮颜色和文字
需要跳转界面上设置, 下个界面上显示
//本界面上设置, 下个界面上显示
// 方式一
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];
// 方式二
UIBarButtonItem * backButtonItem = [[UIBarButtonItem alloc] init];
backButtonItem.title = @"返回";
self.navigationItem.backBarButtonItem = backButtonItem;