前面有一篇博文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. linux 内核参数图解

    https://www.suse.com/documentation/sles11/book_sle_tuning/data/part_tuning_kernel.html http://blog.c ...

  2. MHA 安装过程 原创

    root@monitor yum.repos.d]# cat CentOS-Base.repo [base]name=CentOS-$releasever - Basefailovermethod=p ...

  3. 查看Linux系统架构类型的5条常用命令

    导读 很多时候我们都需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,本文中我将向大家推荐 5 条常用命令.无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎 ...

  4. Java最重要的21个技术点和知识点

    (五)Java最重要的21个技术点和知识点之网络编程.泛型.编程规范相关 写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚 ...

  5. linux环境中 对tomcat配置java环境

    JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx2048m -XX:MaxPermSize=512m" JAVA_HOME="/weblogic1 ...

  6. 【HTML5 3】《html5 开发精要与实例讲解》 step2 -- 结构元素 (待续)

    主要内容:通过 一个博客网站和一个企业网站的制作 展示如何运用HTML5中的各种 结构元素,构建出一个语义清晰,结构分明的Web3.0时代的网站. 案例1:用HTML5中的结构元素构建一个博客网站 疑 ...

  7. 【开源项目6】介绍MenuDrawer这个牛x的控件,实现左右出菜单,上下出菜单

    现在很多应用都很潇洒的从左边屏幕手势一划出个左边的隐藏菜单,右边一划出个隐藏菜单,上边一划出个隐藏菜单,下边一划出个隐藏菜单.或者像android的API16左右的激活列表项的功能.很多人肯定都很着迷 ...

  8. JSP起源、JSP的运行原理、JSP的执行过程

    JSP起源 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变. 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序 ...

  9. Java中创建操作文件和文件夹的工具类

    Java中创建操作文件和文件夹的工具类 FileUtils.java import java.io.BufferedInputStream; import java.io.BufferedOutput ...

  10. ServiceLoader的使用

    ServiceLoader与ClassLoader是Java中2个即相互区别又相互联系的加载器.JVM利用ClassLoader将类载入内存,这是一个类声明周期的第一步(一个java类的完整的生命周期 ...