相关代码: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];
}
最终效果: