zoukankan      html  css  js  c++  java
  • UI整理-----part9--标签控制器(tabBarController)

    1.UITabBarController:和UINavigationController类似,也可以轻松管理多个控制器,轻松完成空间之间的转换。

    2.UITabBarController的使用:

    (1)使用步骤:

             <1>初始化UITabBarController

             <2>设置UIWindow的rootViewController为UITabBarController

             <3>创建相应的子控制器(viewController)

             <4>把子控制器添加到UITabBarController

    (2)代码演示:

    3.重要说明:

    (1)UITabBar:视图控制器里面包含了一个tabbar的控件(即下方的工具条),如果UITAbBar有N个控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件与之对应(默认使用的UITabBarButton在UITabBar中的位置是均分的,UITabBar的高度是49)。如果控件数多于5个,就会在TabBar的右端产生一个“More”,把前面4个显示出来,之后的在“More”中,位置是可以交换的。

    (2)UITabBarButton:UITabBarButton里面显示什么内容,由对应的子控制器中TabBarItem属性来决定

    (3)向TabBarController中添加子控制器的两种方法:

    如果  tabBarC.selectedIndex = 1;  则设置第二个视图为默认选项卡

    4.如果使用系统给定样式:

       <1>通过在UITabBarItem初始化时调用- (instancetype)initWithTabBarSystemItem:(UITabBarSystemItem)systemItemtag:(NSInteger)tag; 方法可以设置标签项目。

       <2>系统标签项目列表:

        typedefNS_ENUM(NSInteger, UITabBarSystemItem) {

        UITabBarSystemItemMore,              当标签条中的图片数超过5个时会显示此标签,点击此标签会显示未显示的图标

        UITabBarSystemItemFavorites,               个人收藏内容

        UITabBarSystemItemFeatured,                程序推荐内容

        UITabBarSystemItemTopRated,                 评价高的内容

        UITabBarSystemItemRecents,                  最近访问的内容 

        UITabBarSystemItemContacts,                    通讯录界面

        UITabBarSystemItemHistory,                 历史记录内容

        UITabBarSystemItemBookmarks,                    书签内容

        UITabBarSystemItemSearch,                 搜索界面

        UITabBarSystemItemDownloads,                     下载中/下载完成的内容

        UITabBarSystemItemMostRecent,                       最新内容

        UITabBarSystemItemMostViewed,                       人气最高的内容

        };

       5.标签栏属性

       

    6.自定义标签栏

    //1. 在视图将要显示的时候,将tabBar原生的button去除
    - (void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
        
        for (UIView *view in self.tabBar.subviews) {
            
            if ([view isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
                
                [view removeFromSuperview];
            }
        }
    }
    
    //2.创建自定义的tabBar
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        _newTabBar.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 49);
    
        [self.tabBar addSubview:_newTabBar];
        
    }
    
    //3.覆写下面方法,添加自定义的control
    - (void)setViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers{
        
        //目的是告诉系统需要创建的controller数量
        [super setViewControllers:viewControllers];
        
        //自定义controller
        [self creatNewControllerWithSelectImageName:SelectImageName];
        
        
    }
    
    
    - (void)creatNewControllerWithSelectImageName:(NSString *)selectImageName
    {
        //创建的control的宽度
        CGFloat controlWidth = [UIScreen mainScreen].bounds.size.width/self.viewControllers.count;
        //初始化选中的control的背景视图
        _selectImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,controlWidth, 49)];
        _selectImage.image = [UIImage imageNamed:selectImageName];
        
        [_newTabBar addSubview:_selectImage];
    
        
        //首先通过for循环了解产生controller的数量
        for (int i = 0; i < self.viewControllers.count; i ++) {
            
            
            //自定义控件
            UIControl *newControl = [[UIControl alloc] initWithFrame:CGRectMake(i * controlWidth, 0, controlWidth, 45)];
            
            //将自定义的tabBarButton 添加到 自定义的tabBar上
            [_newTabBar addSubview:newControl];
            
            //添加点击效果
            [newControl addTarget:self action:@selector(controlAction:) forControlEvents:UIControlEventTouchUpInside];
    
            //通过设置tag方便传值
            newControl.tag = 1000 + i;
            
            //得到当前的控制器
            UIViewController *viewC = [self.viewControllers objectAtIndex:i];
            
            //拿到之前的图片和信息
            UIImageView *imageView = [[UIImageView alloc] init];
            imageView.image = viewC.tabBarItem.image;
            
            UILabel *label = [[UILabel alloc] init];
            label.text = viewC.tabBarItem.title;
            
            
        }
    }
    
    
    
    //
    - (void)controlAction:(UIControl *)control
    {
        self.selectedIndex = control.tag - 1000; //通过获得的tag值进行切换ViewController
        
        //移动动画效果的实现
        [UIView animateWithDuration:.4 animations:^{
            _selectImage.center = control.center;
        }];
    }
    
    
    /*
     细节很重要
      (1)用tabBar的selectedIndex属性,可以让自己创建的按钮关联到ViewController
      (2)取消系统的高亮:可以定义一个按钮,覆写里面的setHighlied方法,什么也不做就行了
      (3)关于几个按钮只选中一个的方法:设置一个属性,记录上一个选中的按钮,点击当前按钮,把上一个按钮设置为未选中,并把当前的按钮设置为选中,最后把当前按钮赋值给上一个按钮
     
     */
    
  • 相关阅读:
    Gof 设计模式
    系统架构师-笔记
    微信小程序弹出层点击穿透问题
    微信小程序-两个input叠加,多次点击字体变粗或闪动
    微信小程序-下拉松开弹不回去顶部留一段空白
    node+vue报错合辑
    Nodejs脚手架搭建基于express的应用
    Vue 核心之数据劫持
    Date——时间戳转化为YYYY-MM-DD h:m:s时间格式
    web页面加载、解析、渲染过程
  • 原文地址:https://www.cnblogs.com/8023huihui/p/5213962.html
Copyright © 2011-2022 走看看