iOS UINavigationController与UITabBarController的组合使用

1.导航类型

UINavigationController 适用于父子页面的跳转

UITabBarController 适用于平级页面的跳转

 

2.presentViewController / dismissViewControllerAnimated和pushViewController / popViewController

(1)只有从UINavigationController导航过来的UIViewController 才可以使用pushViewController / popViewController,从其它导航进入的只能使用presentViewController / dismissViewControllerAnimated

(2)如果A界面是通过presentViewController进入的,那么在A界面里只能使用presentViewController导航,如果A界面是通过UINavigationController包装了一层进入,则可使用pushViewController导航。

(3)如果A界面是一个UITabBarController,进入时是通过presentViewController来导航的,那么子Tab里也只能通过presentViewController来导航,如果进入时是通过UINavigationController包装了一层进入,则可使用[self.tabBarController.navigationController pushViewController:abcdViewController animated:true];这种方式导航。

 

3.修改UINavigationController导航进入后导航栏的图标及文字

UIBarButtonItem* leftBar = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(homeBack)];

self.navigationItem.leftBarButtonItem = leftBar;

//可添加多个导航按钮

 

//    self.navigationItem.leftBarButtonItems = nil;

//同样右边的导航按钮也可以设置

 

4.创建UITabBarController时需注意,要先创建出来,然后通过UINavigationController包装后才能显示,否则tab子项不显示。创建格式如下

TabOneViewController* oneVC = [[TabOneViewController alloc]init];
    oneVC.view.backgroundColor = [UIColor whiteColor];
    UITabBarItem* item1 = [[UITabBarItem alloc]initWithTitle:@"tab1" image:nil tag:0];
    oneVC.tabBarItem = item1;
    
    TabTwoViewController* twoVC = [[TabTwoViewController alloc]init];
    UITabBarItem* item2 = [[UITabBarItem alloc]initWithTitle:@"tab2" image:nil tag:1];
    twoVC.tabBarItem = item2;

    HomeViewController* homeVC = [[HomeViewController alloc]init];
    NSArray* array = [[NSArray alloc]initWithObjects:oneVC,twoVC, nil];
    homeVC.viewControllers = array;
    
    UINavigationController* navVC = [[UINavigationController alloc]initWithRootViewController:homeVC];
    [self presentViewController:navVC animated:YES completion:^{}];
    
    //下面这种创建了HomeViewController后,HomeViewController下的子Tab不能通过push或者pop导航
    //    HomeViewController* homeVC = [[HomeViewController alloc]init];
    //    [self presentViewController:homeVC animated:YES completion:^{}];

 

 

5.UITabBarController各页面之间的切换

实现UITabBarControllerDelegate协议

//实现协议方法,用于切换Tab时,更改页面的标题
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    NSInteger index = tabBarController.selectedIndex;
    NSString *title;
    switch (index) {
        case 0:
            title = @"Message";
            break;
        case 1:
            title = @"User List";
            break;
    }
    self.title 

参考文章:http://www.tuicool.com/articles/J7nIVbN

 

 

你可能感兴趣的:(ios)