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];
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。