美文网首页iOS日常iOS程序猿iOS Developer
用UIButton来覆盖tabBarButton注意事项

用UIButton来覆盖tabBarButton注意事项

作者: imbaWales | 来源:发表于2016-10-19 12:00 被阅读145次
    屏幕快照 2016-10-19 10.43.49.png

    需求目的

    见上图,在设计tabBar中间这种类似"发布"功能的按钮,需要它点击时候有高亮效果,但是tabBarButton无法设置它的高亮状态.

    tabBarButton显示什么内容是由它的控制器的一个叫tabBarItem的属性来决定的.

    用UIButton来覆盖tabBarButton时候会出现一个BUG: 点击时候UIButton没有反应,反而tabBarButton有反应.

    产生原因:

    系统默认tabBarButton是在viewWillAppear方法里面的super方法时候添加的,
    UIButton我们一般是在viewDidLoad方法里面添加,
    viewWillAppear方法是在viewDidLoad之后才调用的,
    所以tabBarButton覆盖UIButton上面,所以tabBarButton就响应点击事件了

    解决办法:

    1.把当前tabBarItem的enabled属性设置为NO(简单粗暴)
    nc2.tabBarItem.enabled = NO

    2.把添加UIButton的代码写在viewWillAppear方法里面的super方法下面.

    实现代码

    先在tabBarController中创建一个控制器(随意,这里用UIViewController即可),加入到tabBarController中用来在tabBar中占位置,并使它对应的tabbarItem不能响应点击
    //创建"发布"占位控制器
        UIViewController *vc2 = [[UIViewController alloc] init];
        vc2.view.backgroundColor = [UIColor redColor];
        [self addChildViewController:vc2];
        //把tabBarController对应的子控制器的tabBarItem属性设置为NO
        vc2.tabBarItem.enabled = NO;
    
    在UITabBarController中提供一个方法用来创建按钮
    //tabBar添加"发布"的按钮
    -(void)addPublishBtn
    {
        //创建按钮并设置按钮的图片及大小
        UIButton *pubBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [pubBtn setImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
        [pubBtn setImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted];
        //注意要给按钮设置完尺寸之后再设置它的位置,不能调换顺序,不然会有错
        [pubBtn sizeToFit];
        [self.tabBar addSubview:pubBtn];
        //设置按钮的位置
        pubBtn.center = CGPointMake(0.5 * self.tabBar.bounds.size.width, 0.5 * self.tabBar.bounds.size.height);
    }
    

    相关文章

      网友评论

      • 估唔到:黄色部分代码块是用MOU上传的么
        估唔到:@imbaWales :kissing_heart:
        imbaWales:@估唔到 不是,设置那里可以设置文本输入格式,有富文本和markdown,选markdown就行了,然后后面有个问号,点击了会教你怎么用
      • LambZhou:你好,有实现代码吗?可以发到zytlamb@163.com 吗?谢谢!
        imbaWales:@LambZhou 代码我更新在文章后面了,知道思路,代码就很简单啦,欢迎交流~

      本文标题:用UIButton来覆盖tabBarButton注意事项

      本文链接:https://www.haomeiwen.com/subject/hgqxuttx.html