IOS tabBarController 嵌套navigationController 实现多个界面的跳转

相关代码:http://download.csdn.net/detail/q562679764/9218367
IOS开发中.很多时候都需要在不同的ViewController中来回的跳转,那么如何更加方便的跳转界面呢? 苹果提供了多种跳转方式 下面就说下最常用的tabBarController和navigationController(以下简称tabBar和Nav)如何组合使用达到嵌套跳转使用户更加方便的在不同界面中跳转

首先说一下个人对这两个控件的理解,在我看来tabBar就像是一个字典,无序的跳转方式可以让用户轻易的在两个没有任何关系的controller中来去自如.tabBar最多显示5个界面的图标,超过后会自动生成一个tableView 将超出的图标存储期内.使用起来也非常的简单,而Nav则更加向是一个数组.压栈出栈的方式使得无序跳转变得有些麻烦.但是确能更好的表现controller的层次关系.我认为tabBar嵌套Nav就像字典嵌套数组,理解了使用起来就不是很麻烦!

//创建一个控制器
MainViewController * VCMain = [[MainViewController alloc] init];
//设置tabBarItem的样式 也就是展示的图标样式
VCMain.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMore tag:0];

MenuViewController * VCMenu = [[MenuViewController alloc] init];
VCMenu.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMostViewed tag:1];

这样我们就创建了两个控制器 接下来创建tabBar

//创建 
UITabBarController * main = [[UITabBarController alloc] init];
//将上面创建的controller加入到tabBar中 这里使用了自变量数组形式加入
main.viewControllers = @[VCMain,VCMenu];
//设置tabBar为根视图,一般如果界面很少的时候我们都是直接将ViewController赋值给根视图的,因为要使用tabBar跳转所以将tabBar赋值给根视图
self.window.rootViewController = main;

OK!这样就完成了 下面是效果图:
 切换前
切换后
由于我添加了Navigation 所以上面会有一个标题,比较懒就写了一个测试程序 view下面的两个按钮就是tabBar了 点击就可以切换视图 无需额外的代码,下面最多可以存放五个按钮

当然 很多时候仅仅这样是不够的.随便一个APP都不可能仅仅四五个页面,虽然是同tabBar没有页面的限制,但对于用户体验来说绝对是很糟糕的一件事情.为了能够更加方便用户跳转,所以使用Nav和tabBar进行嵌套的方式进行跳转.

下面看下是如何进行tabBar嵌套Nav的:

    MainViewController * VCMain = [[MainViewController alloc] init];
    VCMain.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMore tag:0];
    //嵌套需要为每一个tabBar中的controller创建一个navigation 就好像字典嵌套数组中每个value都需要一个数组对象一样
    UINavigationController * NCMain = [[UINavigationController alloc] initWithRootViewController:VCMain];
    VCMain.title = @"main";

    MenuViewController * VCMenu = [[MenuViewController alloc] init];
    VCMenu.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMostViewed tag:1];
    //这里为第二个controller创建nav
    UINavigationController * NCMenu = [[UINavigationController alloc] initWithRootViewController:VCMenu];
    VCMenu.title = @"menu";

    UITabBarController * main = [[UITabBarController alloc] init];
    //注意  这里添加的是NavigationController 而不是上面的Controller
    main.viewControllers = @[NCMain,NCMenu];
    self.window.rootViewController = main;

这样主要的嵌套部分就完成了,navigation的跳转依旧在每个controller中进行

//在menuController中pust到下一个界面的代码  main中也相同 我一共写了四个界面 main和menu界面是又tabBar控制的 show和collect分别由两个Nav控制
- (IBAction)goToCollectViewController:(id)sender {
    CollectViewController * VCCollect = [[CollectViewController alloc] init];
    [self.navigationController pushViewController:VCCollect animated:YES];
}

最终效果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值