前面有一篇博文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里

  1. - (IBAction)gotoTabbarVIew:(id)sender {
  2. NSMutableArray *items = [[NSMutableArray alloc] init];
  3. TestOneController *testOne1 = [[TestOneController alloc] init];
  4. [items addObject:testOne1];
  5. TestTwoController *twoController = [[TestTwoController alloc] init];
  6. [items addObject:twoController];
  7. TestThirdViewController *thirdController = [[TestThirdViewController alloc] init];
  8. [items addObject:thirdController];
  9. // items是数组,每个成员都是UIViewController
  10. TabBarViewController *tabBar = [[TabBarViewController alloc] init];
  11. [tabBar setTitle:@"TabBarController"];
  12. [tabBar setViewControllers:items];
  13. [self presentModalViewController : tabBar animated:YES];
  14. }

这样运行跳转到TabbarView里的了,但是现在的tabbarView里面的三个Tab 按钮都空白的黑色。怎么添加图标和其他样式呢?

3、添加UITabBarItem

在三个ViewController.m文件里添加对应的UITabBarItem,代码如下

  1. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  2. {
  3. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  4. if (self) {
  5. UITabBarItem *item = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemMostRecent tag:1];
  6. self.tabBarItem = item;
  7. self.tabBarItem.badgeValue = [NSString stringWithFormat:@"%d",9];
  8. }
  9. return self;
  10. }

UITabBarSystemItemMostRecent这个item的风格常量,可以根据喜好改变。除此之外还可以用自定义的图片做为item。这里就不演示自己添加图片的方式了。

self.tabBarItem.badgeValue 这个在tabbar item上显示泡泡的数字。

对应的其他ViewController都添加上,tag写不同的数字,后面要用到的。现在运行就有效果了

切换

4、监听Item的点击事件

Tabbar有了,怎么监听你点了哪个item呢?

实现UITabBarDelegate。在apple的文档里查了一下,实现

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item这个方法即可监听

  1. - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
  2. {
  3. if(item.tag == 1){
  4. NSLog(@"TestOneController");
  5. }else if(item.tag == 2){
  6. NSLog(@"TestTwoController");
  7. }else {
  8. NSLog(@"TestThirdController");
  9. }
  10. }

通过tag判断,运行切换:打印log。

  1. 2012-06-28 20:56:19.144 View2TaBBarView[5614:f803] TestTwoController
  2. 2012-06-28 20:56:19.785 View2TaBBarView[5614:f803] TestThirdController
  3. 2012-06-28 20:56:20.363 View2TaBBarView[5614:f803] TestTwoController
  4. 2012-06-28 20:56:20.843 View2TaBBarView[5614:f803] TestOneController

5、返回上个页面

通过    [self.parentViewControllerdismissModalViewControllerAnimated:YES];
返回上个页面

在ThirdView添加一个button。添加Action事件。代码如下:

  1. -(void)backAction:(id)sender{
  2. [self.parentViewController dismissModalViewControllerAnimated:YES];
  3. }
  4. - (void)viewDidLoad
  5. {
  6. [super viewDidLoad];
  7. [self.view setBackgroundColor:[UIColor brownColor]];
  8. UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(40, 50, 60, 30)];
  9. [button setTitle:@"返回" forState:UIControlStateNormal];
  10. [button addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside];
  11. [self.view addSubview:button];
  12. // Do any additional setup after loading the view.
  13. }

运行,点返回button,返回了第一个页面了:

例子的代码:http://download.csdn.net/detail/totogo2010/4399715

著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

iOS学习之第二个View使用UITabBarViewController的更多相关文章

  1. Android学习笔记(第二篇)View中的五大布局

    PS:人不要低估自己的实力,但是也不能高估自己的能力.凡事谦为本... 学习内容: 1.用户界面View中的五大布局... i.首先介绍一下view的概念   view是什么呢?我们已经知道一个Act ...

  2. ***iOS学习之Table View的简单使用和DEMO示例(共Plain普通+Grouped分组两种)

    Table View简单描述: 在iPhone和其他iOS的很多程序中都会看到Table View的出现,除了一般的表格资料展示之外,设置的属性资料往往也用到Table View,Table View ...

  3. The Definitive Guide To Django 2 学习笔记(二) 第二个View 动态内容

    “Hello World”只是简单的展现了Django 基本的工作机制,但它不是动态的网页.第二个View我们将创建一个动态的网页,该页面上将展现当前的时间和日期. 该View需要做两件事,第一,计算 ...

  4. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

  5. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  6. iOS学习笔记10-UIView动画

    上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...

  7. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  8. iOS学习笔记之UITableViewController&UITableView

    iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...

  9. iOS学习之自定义弹出UIPickerView或UIDatePicker(动画效果)

    前面iOS学习之UIPickerView控件的简单使用 用到的UIPickerView弹出来是通过 textField.inputView = selectPicker;   textField.in ...

随机推荐

  1. iOS设备是否越狱的判断代码

    苹果是非常看重产品的安全性的,所以给用户设计了一套复杂的安全机制.这让喜爱自由,崇尚一切开放的程序员们极度不爽,于是越狱就成了苹果和黑客们反复斗法的场所.总体来说,越狱可以让我们随意安装.共享应用,但 ...

  2. ubuntu qq安装

    安装最新版qq2016 qq2012下载链接: https://pan.baidu.com/s/1miFVc04 密码: 3g9w 先解压到自己所在的目录,解压命令自己百度在这个目录下,有三个解压包, ...

  3. [Luogu4630][APIO2018]Duathlon 铁人两项

    luogu 题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行 ...

  4. 织梦DedeCMS模板通用安装方法

    在网络上有很多可以免费下载的DEDECMS模板,下载之后如何安装是很多新手的共同问题.下面将结合我个人使用DEDECMS模板的一些心得,讲一下DEDE模板安装的通用方法. 1.下载一个模板之后要判断一 ...

  5. rundll32命令大全

    rundll32命令大全 命令列:rundll32.exe user.exe,restartwindows 功能: 系统重启 命令列:rundll32.exe user.exe,exitwindows ...

  6. win10安装.net3.5 报错解决

    在win10光盘里提取“microsoft-windows-netfx3-ondemand-package.cab”安装包 然后放在sxs目录 新建批处理...??Cls@ECHO OFFTITLE ...

  7. c++中子类转父类,父类转子类

    #include <iostream> using namespace std; class Father { public: virtual void show() { cout< ...

  8. 【转】无需root Android 4.4现已支持显示电量百分比

    原文网址:http://android.tgbus.com/shouji/news/201311/481145.shtml 现如今,大多数安卓设备.第三方ROM都可以在状态栏以百分比的形式精确显示剩余 ...

  9. NanoPiM1开箱测试

    等了快一周了,终于那M1与那外壳一起给我寄过来了. 上午收到,开箱图就不亮了,来一上好电的图! 一同购买来的MSD卡里什么也没有,上电测试时只看到绿色的灯微微亮(这是一个BUG吗!!!!哈哈). 所以 ...

  10. 引用 LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意义及区别

    1.ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式.ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节.   2.Unicode:用两个字节表示一个字符 ...