zoukankan      html  css  js  c++  java
  • 自定义tabBar

    @implementation XMGTabBarController
    
    /*
     问题:
     1.选中按钮的图片被渲染 -> iOS7之后默认tabBar上按钮图片都会被渲染 1.修改图片 2.通过代码 √
     2.选中按钮的标题颜色:黑色 标题字体大 -> 对应子控制器的tabBarItem √
     3.发布按钮显示不出来 分析:为什么其他图片可以显示,我的图片不能显示 => 发布按钮图片太大,导致显示不出来
     
        1.图片太大,系统帮你渲染 => 能显示 => 位置不对 => 高亮状态达不到
     
        解决:不能修改图片尺寸, 效果:让发布图片居中
     
        2.如何解决:系统的TabBar上按钮状态只有选中,没有高亮状态 => 中间发布按钮 不能用系统tabBarButton => 发布按钮 不是 tabBarController子控制器
     
        1.自定义tabBar
     
     */
    
    
    #pragma mark - 生命周期方法
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // Do any additional setup after loading the view.
        // 1 添加子控制器(5个子控制器) -> 自定义控制器 -> 划分项目文件结构
        [self setupAllChildViewController];
        
        // 2 设置tabBar上按钮内容 -> 由对应的子控制器的tabBarItem属性
        [self setupAllTitleButton];
        
        
        // 3.自定义tabBar
        [self setupTabBar];
        
        // tabBar上按钮并不是在viewDidLoad添加的
        
        
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        
        NSLog(@"%@",self.tabBar.subviews);
    }
    
    #pragma mark - 自定义tabBar
    - (void)setupTabBar
    {
        XMGTabBar *tabBar = [[XMGTabBar alloc] init];
    //    self.tabBar = tabBar;
        
        [self setValue:tabBar forKey:@"tabBar"];
        
        
    }

    XMGTabBar.h

    #import <UIKit/UIKit.h>
    
    @interface XMGTabBar : UITabBar
    
    @end

    XMGTabBar.m

    #import "XMGTabBar.h"
    
    @interface XMGTabBar ()
    
    @property (nonatomic, weak) UIButton *plusButton;
    
    @end
    
    @implementation XMGTabBar
    
    - (UIButton *)plusButton
    {
        if (_plusButton == nil) {
            
            UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
            [btn setImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
            [btn setImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted];
            [btn sizeToFit];
            [self addSubview:btn];
            
            _plusButton = btn;
        }
        return _plusButton;
    }
    
    - (void)layoutSubviews
    {
        [super layoutSubviews];
        
        // 跳转tabBarButton位置
        NSInteger count = self.items.count;
        CGFloat btnW = self.bounds.size.width / (count + 1);
        CGFloat btnH = self.bounds.size.height;
        CGFloat x = 0;
        int i = 0;
        // 私有类:打印出来有个类,但是敲出来没有,说明这个类是系统私有类
        // 遍历子控件 调整布局
        for (UIView *tabBarButton in self.subviews) {
    
            if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
                if (i == 2) {
                    i += 1;
                }
                
                x = i * btnW;
                
                tabBarButton.frame = CGRectMake(x, 0, btnW, btnH);
                
                i++;
            }
        }
        
        // 调整发布按钮位置
        self.plusButton.center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);
        
    }
    
    @end
  • 相关阅读:
    转:jQuery选择器大全(48个代码片段+21幅图演示)
    转:Web 开发中很实用的10个效果【附源码下载】
    转:在网站开发中很有用的8个 jQuery 效果【附源码】
    转:35个让人惊讶的 CSS3 动画效果演示
    转:总结const、readonly、static三者的区别
    转:C# 深入理解堆栈、堆在内存中的实现
    推荐:Asp.Net MVC 多语言(html+js共用一套资源文件)
    转:HttpModule与HttpHandler详解
    转: ASP.NET MVC 多语言配置
    spring集合类型注入
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6492925.html
Copyright © 2011-2022 走看看