zoukankan      html  css  js  c++  java
  • iOS*项目--第一天,自定义TabBar控制器和自定义TabBar,自定义导航控制器

    一、环境配置,和项目层次搭建

      

    二、自定义TabBar

    • 项目中TabBar中的导航按钮美工给的图片太大,图片中包含了图片和文字。最主要的是TabBar上面的按钮图片尺寸是有规定的,当高度大于44的时候,就不会显示了

    解决办法:自定义TabBar,继承自UIView,给UIView设置相应个数的按钮,自定义控件需要

    1、自定义控件类 -- 自身有存放模型数据的集合,在数据的setter方法中定义子控件,给子控件设置相应的属性

    2、模型类--这里的模型类借用了系统的UITabBarItem,因为系统设置TabBar样式就是用的UITabBarItem

    --下面代码是给控制器的数据集合装配

    -- 下面代码是将模型数据传递给自定义控件

    -- 自定义控件中的属性,以及代理,代理的作用点击了TabBar上的按钮后,通知TabBar控制器跳转相应的控制器。

    TabBar控制器的self.selectedIndex = index;可以控制跳转到具体的控制器,所以在为自定义TabBar布局的时候,将内部的按钮设置了tag,相应的tag对应自己的控制器

     

    -- 自定义控件类内部实现代码

     1 @interface ChaosTabBar ()
     2 /** 记录选中的按钮 */
     3 @property(nonatomic,weak) UIButton *btn;
     4 @end
     5 
     6 @implementation ChaosTabBar
     7 
     8 - (void)setItems:(NSArray *)items
     9 {
    10     // 遍历数据集合,添加按钮
    11     _items = items;
    12     for (UITabBarItem *barItem in items) {
    13         UIButton *button = [ChaosTabBarButton buttonWithType:UIButtonTypeCustom];
    14         
    15         // 设置背景图片啊,不是设置iamge
    16         [button setBackgroundImage:barItem.image forState:UIControlStateNormal];
    17         [button setBackgroundImage:barItem.selectedImage forState:UIControlStateSelected];
    18         // 给按钮添加点击事件
    19         [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];
    20         // 绑定 tag 切换控制器的时候使用
    21         button.tag = self.subviews.count;
    22         [self addSubview:button];
    23         
    24         
    25         // 默认选中第一个
    26         if (self.subviews.count == 1) {
    27             [self btnClick:button];
    28         }
    29     }
    30 }
    31 
    32 // 点击按钮执行的方法
    33 - (void)btnClick:(UIButton *)btn
    34 {
    35     // 取消上次选中的按钮
    36     _btn.selected = NO;
    37     btn.selected = YES;
    38     
    39     // 记录被选中的按钮
    40     _btn = btn;
    41     
    42     // 通知代理 TabBarVC 跳转控制器
    43     if ([_delegate respondsToSelector:@selector(tabBar:didClickBtn:)]) {
    44         [_delegate tabBar:self didClickBtn:btn.tag];
    45     }
    46 }
    47 
    48 // 排列子控件
    49 - (void)layoutSubviews
    50 {
    51     [super layoutSubviews];
    52     
    53     NSInteger count = self.subviews.count;
    54     
    55     CGFloat x = 0;
    56     CGFloat y = 0;
    57     CGFloat w = [UIScreen mainScreen].bounds.size.width / count;
    58     CGFloat h = self.bounds.size.height;
    59     
    60     for (int i = 0; i < count; i++) {
    61         UIButton *btn = self.subviews[i];
    62         
    63         x = i * w;
    64         btn.frame = CGRectMake(x, y, w, h);
    65     }
    66 }
    67 
    68 @end
    View Code

    三、自定义导航控制器,设置所有继承自自定义导航控制器类的title的文字颜色

  • 相关阅读:
    <Listener>HttpSessionListener和HttpSessionAttributeListener区别
    @WebFilter怎么控制多个filter的执行顺序
    Springboot+Mybatis+MySQL实例练习时踩坑记录
    Git学习篇之git remote add origin错误
    Springboot高版本中@ConfigurationProperties注解取消location属性
    mevan中GroupId和ArtifactId到底怎么填?
    sqrt()函数对素数判断的优化
    oj错误之char型超出范围
    排序算法之桶排序
    Spring中常用注解
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5363602.html
Copyright © 2011-2022 走看看