前面有一篇博文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,返回了第一个页面了:

Tabbar视图切换,返回上一视图,添加item的更多相关文章

  1. 如何关闭UINavigationController 向右滑动 返回上一层视图

    说明一下: 我的nav 设置的rootview 是 tabbarcontroller,登录界面是push进去的,所以,在登录界面,如果靠近最左边 向右滑动 会出现 tabbarcontroller的视 ...

  2. 切换self.window.rootViewController根视图,导致上一视图控制器不能释放销毁的问题

    在我们APP开发中经常有首次进入应用先进入引导页或者登陆页的情况,类似下图所示      发现登陆以后更改window.rootViewController为应用首页时,登陆页没有销毁掉,通过图层工具 ...

  3. iOS开发系列--视图切换

    概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController ...

  4. MFC视图切换大全总结

    单纯视图之间的切换 单文档多视图切换是我在学习MFC中遇到的一个老大难问题,在今天总算是一一破解了.我觉得视图切换分为三个等级,第一是在未切分窗格的情况下切换视图类:第二是在分割窗格的一个窗格内实行视 ...

  5. UIView 视图切换

    UIView之间常用视图之间切换方式 转载自:http://www.jianshu.com/p/0d53f9402c07 在平时编写代码的过程中,页面之间的跳转可以说就和MVC模式一样是开发必须的.但 ...

  6. Android的Activity切换动画特效库SwitchLayout,视图切换动画库,媲美IOS

    由于看了IOS上面很多开发者开发的APP的视图界面切换动画体验非常好,这些都是IOS自带的,但是Android的Activity等视图切换动画并没有提供原生的,所以特此写了一个可以媲美IOS视图切换动 ...

  7. 给View添加手势,防止点击View上其他视图触发点击效果

    在开发过程中,我们可能会遇到这个问题. 当我们给一个view添加了手势,但是我们又不想点击view上面的视图也触发手势.如下图: 我们在红色view上添加了手势,但是又不想点击黄色view也触发.其实 ...

  8. Android自定义视图三:给自定义视图添加“流畅”的动画

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  9. Android零基础入门第54节:视图切换组件ViewSwitcher

    原文:Android零基础入门第54节:视图切换组件ViewSwitcher 前面三期学习了ProgressBar系列组件,那本期开始一起来学习ViewAnimator组件. 一.ViewAnimat ...

随机推荐

  1. C#开源项目

    原文:  http://alance.iteye.com/blog/693987 一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了 ...

  2. Ubuntu下安装FTP服务及使用(以VSFTPD为例)

    (一)安装与配置 (1)       安装vsftpd $sudo apt-get install vsftpd 这里会提示无法创建/home/ftp目录,手动创建一个 $sudo mkdir /ho ...

  3. #define用法集锦[修正版]

    http://pan.baidu.com/s/1qWEuiCG

  4. iOS开发 - 一个天真的搜索控制器的独白

    文/Azen(简书作者)原文链接:http://www.jianshu.com/p/6d5327111511著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 正文 一.关于横向模块开发 ...

  5. B. Om Nom and Dark Park

    B. Om Nom and Dark Park 在满二叉树上的某些边上添加一些值.使得根节点到叶子节点的路径上的权值和都相等.求最少需要添加多少. 我们利用性质解题.   考察兄弟节点.由于他们从跟节 ...

  6. web 项目 布在tomcat服务器上出现的问题小记

    1.mysql  安装前需要安装.net framework 框架 mysql  无法安装  最后一布,start server 服务起不来. 原因,为上一次mysql没有删除,干净,导入无法安装. ...

  7. DataGridView显示行号的几种方法来自http://www.soaspx.com/dotnet/csharp/csharp_20100204_2740.html

    方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dataGridView1_RowPostPai ...

  8. Emacs golang 配置

    在配置前需要下载用到的包: godoc godef gocode oracle 在下载包之前需要设置好环境变量: # Golang export GOROOT=$HOME/go export GOPA ...

  9. 【Android 界面效果20】Android GradientDrawable类的详解,设置activity的背景颜色渐变效果

    看到这个例子的标题RoundRects,我的第一感觉是介绍RoundRectShape, 打开例子看了代码却是使用GradientDrawable来实现的. GradientDrawable 支持使用 ...

  10. jquery.blockUI.2.31.js 弹出层项目介绍

    {insert_scripts files='user.js'} <style type="text/css"> #float_login{border:1px sol ...