首页 > 代码库 > iOS :UINavigationController

iOS :UINavigationController

1,创建并使用一个UINavigationController

UIViewController *vc = [[UIViewController alloc]init];UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; //然后添加一个视图进去,否则导航栏也没有意义的

2,设置导航栏的左右按钮:

1>常规方法添加:

#pragma mark - 设置左边按钮    //设置单个按钮    vc.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"title" style:UIBarButtonItemStyleBordered target:self action:@selector(function)];    //设置多个按钮    vc.navigationItem.leftBarButtonItems = @[[[UIBarButtonItem alloc]initWithTitle:@"title" style:UIBarButtonItemStyleBordered target:self action:@selector(function)]];

2>加CustomView上去:

//添加CustomView上去    vc.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:[[UIButton alloc]init]];

注意:对于导航控制器左右的按钮,设置其位置是没有效果的,只能设置其宽高。

3.设置导航栏的标题

1>直接设置其根控制器的title:

//设置标题 vc.title = @"title";

2>设置titleView:

//设置标题的视图    vc.navigationItem.titleView = [UIButton buttonWithType:UIButtonTypeContactAdd];

4.控制器之间的跳转:

1>压入栈:进入更深层的控制器,往右走

//压入栈    [vc.navigationController pushViewController:vc animated:YES];

2>出栈:进入到更浅的控制器,往左走

//出栈到上一层控制器    [vc.navigationController popToViewController:aVc animated:YES];    //直接到根控制器    [vc.navigationController popToRootViewControllerAnimated:YES];

注意:通过控制器本身,也可以进行控制器之间的跳转

如:

#pragma mark - model控制器    //弹出    [self presentViewController:vc animated:YES completion:^{        code...    }];    //消失    [vc dismissViewControllerAnimated:YES completion:^{        code...    }];

5.主题设置,待写:

 

6.技巧:当想拦截导航控制器的某些操作时,可以自定义导航控制器,自定义其中的一些方法。

比如,在UITabBarController时,想在跳转控制器的时候,隐藏底部的tabBar的时候可以这么做

//当PUSH的时候隐藏底部的tabBar    vc.hidesBottomBarWhenPushed = YES;

但是,当所有的控制器在跳转的时候都要隐藏底部的tabBar的话,上面的做法就非常麻烦了,而应该自定义导航控制器,拦截控制器跳转的操作,再设置跳转的控制器跳转时隐藏底部的tabBar,这样就可以只写一次代码了

//在自定义的UINavigationController中重写这个方法,拦截控制器跳转的操作,将要跳转控制器的hidesBottomBarWhenPushed属性改为YES- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{    viewController.hidesBottomBarWhenPushed = YES;    [super pushViewController:viewController animated:YES];}

iOS :UINavigationController