zoukankan      html  css  js  c++  java
  • UITabBarController的使用

    UITabBarController的使用

    UITabBarController 是IOS中很常用的一个视图控件,它通常作为整个程序的根视图控制器,不能添加到别的viewController中。

    UITabBarController的结构示意图如下:

    1.手动创建TabController:

    通过在AppDelegate类当中的application:didFinishedLaunchingWithOptions:方法中添加代码:

    self.window=[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

    ViewController *con1,*con2;//自己创建的ViewController类,包含一个nib文件

    con1=[[ViewController alloc]init];

    con1.title=@”first”;//这个标题将显示在tabItem按钮里面

    con2=[[ViewController alloc]init];

    con2.title=@”second”;

    tabBarController=[[UITabBarViewController alloc]init];

    self.tabBarController.viewControllers=[NSArray arrayForObjects:con1,con2,nil];

    self.window.rootViewController=tabBarController;//设置为根控制器

    [self.window makeKeyAndVisible];

    2.UITabBarItem

    UITabBarItem *item1=[[UITabBarItem alloc]initWithTitle:@”first” image:nil tag:1];

    //创建一个UITabBarItem对象

    [item1 setFinishedSelectedImage:[UIImage imageNamed:@”pic1.png”] withFinishedUnselectedImage:[UIImage imageNamed:@”pic2.png”];//设定item的图片

    con1.tabBarItem=item1//赋值给controller的tabBarItem属性。

    效果如下图,图片比较大不好意思。

    3.more Navigation Controller

    当UITabItem超过5个的时候,就会出现一个more标签,引导你进入一个more导航控制器,里面存放值多出来的tabItem。点击任意一个就会进入响应的tabItem

    点击edit会进入一个编辑界面:

    进入这个界面后我们可以通过拖拽改变标签的顺序,如果不想使用此功能,就将customizableViewController属性设置为nil来屏蔽此功能。

    通过编辑customizableViewController属性,可以实现复杂的带条件的画面显示制定顺序。

    假如设置1~7个标签,将前三个固定下来,但是第四个以上就可以调换顺序,

    tabBarViewController.customizableViewControllers =[NSArray arrayWithObjects:con4,con5,con6,nil];

    我们可以通过设置UITabBarController的customizableViewControllers属性来指定viewControllers的一个子集,允许一部分的viewController是可以放到tabBar中显示的。

    当viewControllers的属性发生变化的时候,customizableViewControllers就会自动设置成和viewControllers一致,因此在设置完viewControllers后,重新设置一遍customizableViewControllers属性。

    4.UITabBarController的旋转

     当且仅当所有的viewContrller都支持旋转的时候,tabBarController才回支持旋转。但是只有当前显示的viewController才会接收到旋转消息。

    5.UITabBar

    UITabBar有一些方法可以改变自身的状态,但是对于UITabBarController自带的tabBar,直接修改状态会抛出异常。*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Directly modifying a tab bar managed by a tab bar controller is not allowed.

    6.改变选中的控制器

    改变显示的控制器,可以使用

    1.selectIndex属性

    通过该属性可以获得当前选中的viewController,设置该属性,可以显示对应的视图控制器。当显示的式more导航控制器中的视图是,返回值是NSNotFound。设置超出ViewController的范围就会被忽略。

    2.selectedViewController属性

    通过该属性可以获取到当前显示的viewController,通过该属性可以设置当前选中的视图控制器。tabBarController.moreNavigationController可以选中moreViewController。

    3.viewController属性

    设置viewControllers属性也会影响当前选中的viewController,设置该属性时UITabBarController首先会清空所有旧的viewController,然后部署新的viewController,接着尝试重新选中上一次显示的viewController,如果该viewController已经不存在的话,会接着尝试选中index和selectedIndex相同的viewController,如果该index无效的话,则默认选中第一个viewController。

    7.事件监听

    我们可以通过UITabBarControllerDelegate监听UITabBarController的选中的viewController的变化,以及moreViewController中对所有viewController的编辑。这里需要注意的是delegate方法要放在AppDelegate.h头文件里面。而且tabController.delegate要设置为self才会调用设置的方法。

    - (BOOL)tabBarController:(UITabBarController *)tabBarController1 shouldSelectViewController:(UIViewController *)viewController

    {

        if ([tabBarController1.viewControllersindexOfObject:viewController] != 1) {

            returnYES;

        }

        returnNO;

    }

    - (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers

    {

        [selfshowAlert:@"willBeginCustom"];

    }

    当点击edit是弹出对话框。

    - (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed

    {

         [selfshowAlert:@"willEndCustom"];

    }

    当点击done的时候先弹出对话框

    - (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed

    {

        [selfshowAlert:@"didEndCustom"];

    }

    紧接着弹出对话框

  • 相关阅读:
    Hibernate使用笔记
    svn树冲突的解决方法
    SVN 清理失败的解决方法
    类的实现
    lua元表
    lua中table的常用方法
    C/C++作用域运算符::
    Cocos2d-x Lua 学习
    Lua学习
    吾 三十而望
  • 原文地址:https://www.cnblogs.com/jackwuyongxing/p/3515223.html
Copyright © 2011-2022 走看看