2016.01.21 UITabBarController

  UITabBarController是IOS中很常用的一个viewController。UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的container viewController中。可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例子就是QQ、微信、微博等应⽤。

.创建

  在storyboard中的模拟我们就不多说了,直接进入直接代码的编写。(模拟微博的tabBarController进行编写)

  我们选择在ApplicationDelegate中的 applicationDidFinishLaunching:方法中进行创建,因为前面已经说到了UITabBarController作为整个程序的rootViewController,并且要在显示程序的windows之前创建好。具体的创建步骤:

    (1)初始化UITabBarController

    (2)设置UIWindow的rootViewController为UITabBarController

    (3)创建相应的子控制器(viewcontroller)

    (4)把子控制器添加到UITabBarController

      eg://创建TabBarControllor

        CustomTabBarController *tabBarController = [[CustomTabBarController alloc] init];

        tabBarController.tabBar.tintColor = [UIColor orangeColor];

        //设置窗口的根视图控制器

        self.window.rootViewController = tabBarController;

        //创建tabBar上管理的每个界面

        //1.创建主页

        HomeViewController *homeVC = [[HomeViewController alloc] init];

        homeVC.view.backgroundColor = [UIColor whiteColor];

        。。。。。。

        //将创建的homeVC添加到tabBarController

        tabBarController.viewControllers = @[homeVC, msgVC, discoverVC, profileVC];    //viewControllers实际上就是一个数组,只需要把想传进去的viewController放进这个数组就可以了 

    注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是第一个添加的控制器对应的View

      实际效果:

        

.UITabBar

  下方的工具条称为UITabBar ,如果UITabBarController有N个子控制器,那么UITabBar内部就会有N 个UITabBarButton作为子控件与之对应。

        (P.S.系统中没有放出UITabBarButton这个类,但是我们可以用『NSClassFromString(@"UITabBarButton"』)

  这里值得一提的是:UITabBarButton在UITabBar中得位置是均分的,UITabBar的默认高度为49,并且没有办法更改。

.UITabBarItem

  UITabBar上面显示的每一个Tab都对应着一个ViewController,我们可以通过设置viewcontroller.tabBarItem属性来改变tabbar上对应的tab显示内容。否则系统将会根据viewController的title自动创建一个,该tabBarItem只显示文字,没有图像。

    eg:homeVC.tabBarItem = [[UITabBarItem allocinitWithTitle:@"主页" image:[UIImage imageNamed:@"tabbar_home"selectedImage:[[UIImage imageNamed:@"tabbar_home_selected"imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

.在UITabBar中间添加一个btn

  

这个方法会在以下的情况下自动调用,如果想要手动调用的话应该调用『layoutIfNeeded』:

   .一个视图A被添加到另外一个视图B

   .一个视图的frame改变

 1 - (void)layoutSubviews{
 2     [super layoutSubviews];
 3     
 4     CGFloat avgWidth = self.frame.size.width / 5;
 5     
 6     NSInteger index = 0;
 7     for (UIView *item in self.subviews) {
 8         if ([item isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
 9             item.frame = CGRectMake(index * avgWidth, item.frame.origin.y, avgWidth, item.frame.size.height);
10             
11             index++;
12             if (index == 2) {
13                 _addBtn.frame = CGRectMake(index * avgWidth, 3, avgWidth, 44);
14                 [self addSubview:_addBtn];
15                 index++;
16             }
17         }
18     }
19 }

 

 

 

原文地址:https://www.cnblogs.com/immustard/p/5149364.html