iOS三级控制器的4种创建方法
2015-08-03 13:21
381 查看
三级控制器:视图控制器(UIViewController),导航控制器(UINavigationController),标签控制器(UITabBarController)
三者的关系是:标签控制器(UITabBarController)管理(一个或多个)导航控制器(UINavigationController),每个导航控制器管理一个视图控制器(UIViewController)
三级控制器的搭建方法:首先将Window的根视图设为标签控制器
特别强调一点:创建三级控制器的时候,一定要先创建子视图,再自定义标签栏,不能颠倒,不然会导致标签栏按钮无法点击
方法1:用标签控制器管理5个导航控制器,每个导航控制器再管理一个视图控制器(这里每一组导航控制器和视图控制器组是通过storyBoard画的)
方法4:使用视图控制器(ViewController)的子控制器来控制5个导航控制器(这里每一组导航控制器和视图控制器组是通过纯代码写的)
请大家参考上面几个例子自己写一下
三者的关系是:标签控制器(UITabBarController)管理(一个或多个)导航控制器(UINavigationController),每个导航控制器管理一个视图控制器(UIViewController)
三级控制器的搭建方法:首先将Window的根视图设为标签控制器
特别强调一点:创建三级控制器的时候,一定要先创建子视图,再自定义标签栏,不能颠倒,不然会导致标签栏按钮无法点击
方法1:用标签控制器管理5个导航控制器,每个导航控制器再管理一个视图控制器(这里每一组导航控制器和视图控制器组是通过storyBoard画的)
//首页 UIStoryboard * homeStory = [UIStoryboard storyboardWithName:@"Home" bundle:nil]; UINavigationController * homeNav = [homeStory instantiateInitialViewController]; NSArray * arr = @[homeNav,...]; self.viewControllers = arr; //自定义标签栏 -(void)_initTab { UIImageView * tabView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, 49)]; [self.tabBar addSubview:tabView]; for (int i = 0; i < 5; i++) { UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; button.tag = 100 + i; [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; button.frame = CGRectMake(kScreenWidth/5.0*i, 0, kScreenWidth/5.0, 49); [tabView addSubview:button]; } }方法2:和方法1类似,只不过是用纯代码创建
// 创建子视图 HomeViewController * home = [[HomeViewController alloc]init]; // 将子视图添加到导航控制器中 NSArray * views = @[home,...]; NSMutableArray * navigations = [[NSMutableArray alloc]init]; for (int i = 0; i<5; i++) { UINavigationController * navigation = [[UINavigationController alloc]initWithRootViewController:views[i]]; [navigations addObject:navigation]; } self.viewControllers = navigations;方法3:使用视图控制器(ViewController)的子控制器来控制5个导航控制器,(这里每一组导航控制器和视图控制器组是通过storyBoard画的)
// 通过storyBoard文件获得导航控制器 UIStoryboard * homeBoard = [UIStoryboard storyboardWithName:@"Home" bundle:nil]; UINavigationController * homeNav = [homeBoard instantiateInitialViewController]; NSArray * arr = @[homeNav,...]; // 将5个控制器交给当前控制器(Viewcontroller) for (int i = 0; i<arr.count; i++) { UINavigationController * nav = arr[i]; // 将nav作为当前对象的子控制器 [self addChildViewController:nav]; } // 设置默认显示的视图 UIViewController * viewCtrl = self.childViewControllers[0]; [self.view addSubview:viewCtrl.view]; //点击最下方按钮的时候切换视图(做到标签控制器的效果),这里要声明一个selectIndex属性,因为不是标签控制器,自身没有selectIndex属性 //重写selectIndex的setter方法 -(void)setSelectIndex:(NSInteger)selectIndex { // 1,取得当前正在显示的视图控制器 UIViewController * lastViewCtrl = self.childViewControllers[_selectIndex]; // 2,移除当前正在显示的视图控制器 [lastViewCtrl.view removeFromSuperview]; // 3,取得选中的视图控制器 UIViewController * selectCtrl = self.childViewControllers[selectIndex]; // 4,添加选中的视图控制器 [self.view insertSubview:selectCtrl.view aboveSubview:lastViewCtrl.view]; // 5,将最下方标签视图移到最上方 [self.view bringSubviewToFront:_tabbarView]; _selectIndex = selectIndex; }
方法4:使用视图控制器(ViewController)的子控制器来控制5个导航控制器(这里每一组导航控制器和视图控制器组是通过纯代码写的)
请大家参考上面几个例子自己写一下
相关文章推荐
- iOS——Xcode中添加第三方库
- ios使用TextField输入框
- ios多线程开发的常用三种方式
- iOS Provisioning Profile(配置文件)与Code Signing详解
- 关于使用github上开源类库 ios-ftp-server 的心得
- iOS 创建推送证书
- iOS 7 教程:定制iOS 7中的导航栏和状态栏
- iOS开发 实现拖动列表时,放大列表顶部的图片
- Associative机制使用场景
- iOS图片拉伸技巧
- iOS使用系统默认声音、震动
- IOS得到所选择的背景图片的坐标颜色
- 高仿百度传课iOS版,版本号2.4.1.2
- Info.plist 和 pch 文件
- IOS 使用CoreText实现表情文本URL等混合显示控件
- IOS软键盘弹出和隐藏
- iOS输入框禁止输入emoji表情
- iOS 去掉系统bar自带的线
- ios项目中引用其他开源项目
- iOS开发 线程计时器