UITabBarController使用总结(重大更新)

今天搞了半天的UITabBarController,一开始打算在主控制窗口mainViewController中添加UITabBarController,首先通过Interface Builder添加,发现添加的UITabBarController无法跟xcode中的输出口(IBOutlet)连上,加入到view中无法通过切换tab来切换viewcontroller。

后来换成通过代码创建。也是同样的问题。切换tab,viewcontroller不出来。郁闷到极点。后来搜索到一篇文章,说UITabBarController一般添加到appDelegate的。想想会不会真的只能添加到appDelegate而不能添加到viewcontroller里面呢?测试了一下,将代码移到appDelegate中。运行,shit,不禁倒抽一口气。果然是在appDelegate里面完全正常。切换tab如行云流水。真搞不懂,为啥就不能像其他viewcontroller那样添加到其他viewcontroller中呢?还是自己没有掌握方法?粗略看了一下帮助文档,好像也没提到只能添加到appDelegate中。不知是不是看得太粗略了没看清楚。怎么都好,暂时解决了这个问题。希望以后不断深入后可以得到答案。

另外总结一点:

UITabBarController中viewControllers如果添加了相同的viewcontroller,则不会增加tabitem的数量。这个在测试的时候发现。当时将viewcontrollers指定为三个一样的viewcontroller(想省事,少敲代码),结果出来的tabbar只有一个tab。换了另外两个不同的viewcontroller,问题就解决了。呵呵。

 

【重大更新】

就在写完这篇文章不到10分钟的时间,偶尔间有了一个大发现。上面说到的UITbaBarController只能用在appDelegate的说法是错误的。因为是完全可以在viewcontroller中使用的。之前的代码之所以出现错误,误导了自己半天,原因就是创建UITabBarController后,将它的位置重新设置了,而设置了错误的大小而导致切换tab时无法出现viewcontroller。设置的代码是这样的:[tabBarController .view setFrame:CGRectMake(0, self.view.frame.size.height - 49, self.view.frame.size.width, 49)];之所以是这样设置,是因为开始的时候没有了解tabbarcontroller,将它当做仅仅是一个tabbar来使用,将高度设置为49,y坐标设置为底端往上49像素。一个愚蠢的做法以及对控件的完全不了解导致了半天的瞎搞。由此警醒自己,即便再紧张的项目,也要先了解控件的使用。俗话说,磨刀不误砍柴工。胡乱的写代码还不如先静下心看懂了控件怎么用之后再去动手。经过这一次的教训,务必切记切记,这样才不枉半天的劳动力啊。

 

转帖一段学习笔记:

UITabBarController学习笔记


一. 基本知识


和UINavigationController类似,UITabBarController也可以用来控制多个页面导航,用户可以在多个视图控制器之间移动,并可以定制屏幕底部的选项卡栏。


借助屏幕底部的选项卡 栏,UITabBarController不必像UINavigationController那样以栈的方式推入和推出视图,而是组建一系列的控制器 (他们各自可以是UIViewController,UINavigationController,UITableViewController或任何 其他种类的视图控制器),并将它们添加到选项卡栏,使每个选项卡对应一个视图控制器。


二. 具体介绍


1. 通过代码的方式创建UITabBarController界面


代码的位置应该放在xxxAppDelegate.m中 的applicationDidFinishLaunching:方法中,因为Tab Bar Controller通常是为应用窗口提供根视图,所以需要在程序启动后,窗口显示前创建Tab Bar Controller。具体创建步骤为:


(1) 创建一个新的UITabBarController对象


(2) 为每一个Tab创建一个root view controller


(3) 把这些root view controllers添加到一个array中,再把这个array分配给tab bar controller的viewControllers属性


(4) 把tab bar controller's view添加到应用程序主窗口


例子:


- (void)applicationDidFinishLaunching:(UIApplication *)application {


   tabBarController = [[UITabBarController alloc] init];




   MyViewController* vc1 = [[MyViewController alloc] init];


   MyOtherViewController* vc2 = [[MyOtherViewController alloc] init];




   NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, nil];


   tabBarController.viewControllers = controllers;




   // Add the tab bar controller's current view as a subview of the window


   [window addSubview:tabBarController.view];


}


2. 通过代码的方式创建TabBarItem


Tab Bar Controller的每个选项卡都得有一个UITabBarItem,可以在其root view controller初始化时创建并添加UITabBarItem。


例子:


- (id)init {


   if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {


      self.title = @"My View Controller";




      UIImage* anImage = [UIImage imageNamed:@"MyViewControllerImage.png"];


      UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:anImage tag:0];


      self.tabBarItem = theItem;


      [theItem release];


   }


   return self;


}

你可能感兴趣的:(UITabBarController使用总结(重大更新))