iOS学习之第二个View使用UITabBarViewController
前面有一篇博文iOS学习之Tab Bar的使用和视图切换 这是在AppDelegate里使用Tabbar,这样的程序打开就是TabbarView了,有时候我们需要给程序做一些帮助页面,或者登录页面,之后才跳转到tabbar
View里,或者后面的页面才使用Tabbar的,那这样怎么实现呢?
我们建立一个视图,然后在这个视图通过[selfpresentModalViewController : tabBaranimated:YES];跳转来实现。
当程序中需要在多个View直接切换的时候,可以使用 UINavigationController,也可以用 ModalViewController。UINabigationController 是通过导航条来切换多个 view。而如果 view 的数量比较少,且显示领域为全屏的时候,用 ModalViewController 就比较合适(比如需要用户输入信息的view,结束后自动回复到之前的view)
1、新建一个Single View app,按Command + N新建三个ViewController ,都选上.xib文件。
1.1 新建的Controller分别是:TestOneController TestTwoController TestThirdViewController ,他们都继承UIViewController。

单击xib文件,在.xib文件的属性窗口里修改View的颜色,这样好在切换页面的时候区分出来是切换了页面。
好吧,我的ThirdViewController没有xib,可能是漏了,不过也没关系,一样能用。
1.2 添加TabBarViewController
最重要的是再添加一个TabBarViewController,这个需要继承的UITabBarController
2、在ViewController也就是程序进来的第一个页面。在这里添加一个跳转的Button,并加上Action,然后在Action里实现跳转到tabbar.
ViewController.m里实现代码。这就跳转,把刚才建立的三个ViewController都添加到Tabbar里
- - (IBAction)gotoTabbarVIew:(id)sender {
- NSMutableArray *items = [[NSMutableArray alloc] init];
- TestOneController *testOne1 = [[TestOneController alloc] init];
- [items addObject:testOne1];
- TestTwoController *twoController = [[TestTwoController alloc] init];
- [items addObject:twoController];
- TestThirdViewController *thirdController = [[TestThirdViewController alloc] init];
- [items addObject:thirdController];
- // items是数组,每个成员都是UIViewController
- TabBarViewController *tabBar = [[TabBarViewController alloc] init];
- [tabBar setTitle:@"TabBarController"];
- [tabBar setViewControllers:items];
- [self presentModalViewController : tabBar animated:YES];
- }
这样运行跳转到TabbarView里的了,但是现在的tabbarView里面的三个Tab 按钮都空白的黑色。怎么添加图标和其他样式呢?

3、添加UITabBarItem
在三个ViewController.m文件里添加对应的UITabBarItem,代码如下
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- UITabBarItem *item = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemMostRecent tag:1];
- self.tabBarItem = item;
- self.tabBarItem.badgeValue = [NSString stringWithFormat:@"%d",9];
- }
- return self;
- }
UITabBarSystemItemMostRecent这个item的风格常量,可以根据喜好改变。除此之外还可以用自定义的图片做为item。这里就不演示自己添加图片的方式了。
self.tabBarItem.badgeValue 这个在tabbar item上显示泡泡的数字。
对应的其他ViewController都添加上,tag写不同的数字,后面要用到的。现在运行就有效果了
切换
4、监听Item的点击事件
Tabbar有了,怎么监听你点了哪个item呢?
实现UITabBarDelegate。在apple的文档里查了一下,实现
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item这个方法即可监听
- - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
- {
- if(item.tag == 1){
- NSLog(@"TestOneController");
- }else if(item.tag == 2){
- NSLog(@"TestTwoController");
- }else {
- NSLog(@"TestThirdController");
- }
- }
通过tag判断,运行切换:打印log。
- 2012-06-28 20:56:19.144 View2TaBBarView[5614:f803] TestTwoController
- 2012-06-28 20:56:19.785 View2TaBBarView[5614:f803] TestThirdController
- 2012-06-28 20:56:20.363 View2TaBBarView[5614:f803] TestTwoController
- 2012-06-28 20:56:20.843 View2TaBBarView[5614:f803] TestOneController
5、返回上个页面
通过 [self.parentViewControllerdismissModalViewControllerAnimated:YES];
返回上个页面
在ThirdView添加一个button。添加Action事件。代码如下:
- -(void)backAction:(id)sender{
- [self.parentViewController dismissModalViewControllerAnimated:YES];
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- [self.view setBackgroundColor:[UIColor brownColor]];
- UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(40, 50, 60, 30)];
- [button setTitle:@"返回" forState:UIControlStateNormal];
- [button addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:button];
- // Do any additional setup after loading the view.
- }
运行,点返回button,返回了第一个页面了:

例子的代码:http://download.csdn.net/detail/totogo2010/4399715
iOS学习之第二个View使用UITabBarViewController的更多相关文章
- Android学习笔记(第二篇)View中的五大布局
PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念 view是什么呢?我们已经知道一个Act ...
- ***iOS学习之Table View的简单使用和DEMO示例(共Plain普通+Grouped分组两种)
Table View简单描述: 在iPhone和其他iOS的很多程序中都会看到Table View的出现,除了一般的表格资料展示之外,设置的属性资料往往也用到Table View,Table View ...
- The Definitive Guide To Django 2 学习笔记(二) 第二个View 动态内容
“Hello World”只是简单的展现了Django 基本的工作机制,但它不是动态的网页.第二个View我们将创建一个动态的网页,该页面上将展现当前的时间和日期. 该View需要做两件事,第一,计算 ...
- IOS学习之路--OC的基础知识
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记10-UIView动画
上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- iOS学习笔记之UITableViewController&UITableView
iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...
- iOS学习之自定义弹出UIPickerView或UIDatePicker(动画效果)
前面iOS学习之UIPickerView控件的简单使用 用到的UIPickerView弹出来是通过 textField.inputView = selectPicker; textField.in ...
随机推荐
- HTMLTestRunner显示用例打印内容
我们知道默认的HTMLTestRunner运行时成功只会显示...,失败也只是显示E suite = unittest.TestLoader().loadTestsFromTestCase(MyTes ...
- bzoj 2632 [neerc2011]Gcd guessing game——贪心(存疑)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2632 官方题解:http://neerc.ifmo.ru/archive/2011/neer ...
- 【常见Web应用安全问题】---4、Directory traversal
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...
- PHP远程连接mysql
http://blog.chinaunix.net/uid-23215128-id-2951624.html # mysql -urootmysql> use mysql; Database c ...
- hadoop深入学习之SequenceFile
的1个byte 3.Key和Value的类名 4.压缩相关的信息 5.其他用户定义的元数据 6.同步标记,sync marker Metadata 在文件创建时就写好了,所以也是不能更改的.条记录存储 ...
- nagios(centreon)监控Linux日志
1 将check_log3.pl下载后放到客户端服务器的插件文件夹[root@SSAVL2475 libexec]# cp /tmp/check_log3.pl /usr/local/nagios/ ...
- 笔记:LNK2001不代表链接器真的需要链接相关符号
环境:VS2008 我们都知道,链接器在生成可执行程序时,会忽略那些没有用到的符号.但是昨天遇到一个链接问题,看起来与这条基本策略并不相符.首先看一个静态链接库的结构: lib | |---- ...
- python 高阶内置函数
1.lambda 匿名函数 lambda 参数: 返回值 函数名统一都叫lambda. 2.sorted() 排序函数 排序函数 sorted(iterable,key,reverse) key:排序 ...
- 将 .NET 任务作为 WinRT 异步操作公开
转自:http://blogs.msdn.com/b/windowsappdev_cn/archive/2012/06/22/net-winrt.aspx 在博文深入探究 Await 和 WinRT ...
- Java复习——多线程与并发库
开启一个线程 实现一个线程的方式有两种:继承Thread类.实现Runnable接口(也存在说三种的情况,第三种是使用线程并发库中的线程池创建一个线程).这两种方法都需要重写Run方法,具体的线程逻辑 ...