zoukankan      html  css  js  c++  java
  • 关于自定义Tabbar控件,可以更改tabbar的样式和尺寸

      

      大家好,这么晚了,因为我昨天再接过的项目是,发现外包的伙伴们写的Tabbar是系统的,因为我们的产品要求的是44的高度,而系统的Tabbar的高度是49像素,所以怎么办呢,外包的伙伴们做的是在系统的Tabbar的Item上做的视图覆盖,这样我发现有白色的5像素视图会在iPhone5一下的设备并且是IOS7一下的系统上出现,那么怎么办呢,当然做好的办法是不是补补改改,最好的就是从跟上解决,这样我们框架上的其他东西就不会导致一些问题的出现,所以就要自定义Tabbar,

    系统给了一个好的方法:切换视图控制器的:

    - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(5_0);

    //这个要注意的一点事一定要判断是否finished 做一个BOOL判断,如果没有判断,你要快速的点击切换,会出现白屏,因为你的某一个Controller有refresh或者reload之类的,影响切换的速度,所以一定要做个bool值判断,下来这家看代码吧:

    - (void)viewDidLoad

    {

        

        [superviewDidLoad];

     

        isTransted = YES;

        //主控制器的内容视图

        _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, self.view.height - 44)];

        [self.viewaddSubview:_contentView];

        

        //主控制器的

        _toolView = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.height - 44, self.view.width,44)];

        _toolView.backgroundColor = [UIColorredColor];

        _toolView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;

        [self.view addSubview:_toolView];

     

        messages = [[Messagesalloc] init];

        Grade *grade  = [[Grade alloc] init];

        PhotoTakeCenterVC *tvc = [[PhotoTakeCenterVCalloc]init];

        ListenClassListController *listen = [[ListenClassListControlleralloc]init];

        Setting *setting = [[Setting alloc] init];

        

        [selfaddChildViewController:messages];

        [selfaddChildViewController:grade];

        [selfaddChildViewController:tvc];

        [selfaddChildViewController:listen];

        [selfaddChildViewController:setting];

     

        UIViewController *firstController = self.childViewControllers[0];

        _selectedIndex = 1;

        firstController.view.top = 0;

     

     

     for (NSInteger i = 0; i < count; i ++)

        {

            CGFloat width  = 60;

            CGFloat height = 44;

            CGFloat y = 524 - AutoHeight;

            CGFloat x = (width + 1)*i;

            

            if (i == 2)

            {

                width = 76;

                height = 54;

                y -= 10;

            }

            else if (i > 2)

            {

                x += 15;

            }

            

            CGFloat lineY = y;

            

            if (i == 2)

            {

                lineY += 10;

            }

            

            

            UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(x + width, 0, 2, height)];

            lineView.backgroundColor = COLOR_WITH_RGB(28.0f, 30.0f, 36.0f);

            [_toolView addSubview:lineView];

            [lineView release];

            

            if (iPhone5) {

                y = 568 - 44;

            }

            else

            {

                y = 480 - 44;

            }

            

            if (i != 2) {

                BarItem *button = [[BarItem alloc] initWithFrame:CGRectMake(x, 0, width, height)];

                NSString *normal = [NSString stringWithFormat:@"TabItem%d_0",i];

                [button setImage:LOADIMAGE(normal, @"png") forState:UIControlStateNormal];

                

                NSString *selected = [NSString stringWithFormat:@"NewTabItem%d_1",i];

                [button setImage:LOADIMAGE(selected, @"png") forState:UIControlStateSelected];

                button.badgeValue = @"0";

                button.tag = i + ITEM_TAG - 999;

                [_toolView addSubview:button];

                if (i == 0)

                {

                    button.selected = YES;

                    [[NSNotificationCenterdefaultCenter] postNotificationName:@"UPDATE_ITEM_BADGEVALUE"object:chattype_chat];

                }

                [button release];

                

                [button addTarget:selfaction:@selector(selectControl:) forControlEvents:UIControlEventTouchUpInside];

                self.selectedIndex = 1;

                

            }

     

            if(i == 2)

            {

                

                BarItem *button = [[BarItem alloc] initWithFrame:CGRectMake(x, -10, width, height)];

                NSString *normal = [NSString stringWithFormat:@"TabItem%d_0",i];

                [button setImage:LOADIMAGE(normal, @"png") forState:UIControlStateNormal];

                

                NSString *selected = [NSString stringWithFormat:@"NewTabItem%d_1",i];

                [button setImage:LOADIMAGE(selected, @"png") forState:UIControlStateSelected];

                button.badgeValue = @"0";

                button.tag = i + ITEM_TAG -999;

                [_toolView addSubview:button];

                [button addTarget:selfaction:@selector(takePhoto) forControlEvents:UIControlEventTouchUpInside];

                [button release];

            }

            

        }

     [_contentView addSubview:firstController.view];

    }

     

    - (void)selectControl:(BarItem *)sender

    {

        if (isTransted == NO) {

            return;

        }

        ;

        if (_selectedIndex != sender.tag)

        {

            isTransted = NO;

            UIViewController *toViewController = self.childViewControllers[sender.tag - 1];

            toViewController.view.top = 0;

            

        

            [selftransitionFromViewController:self.childViewControllers[_selectedIndex - 1] toViewController:toViewController duration:0options:0animations:^{

                

            } completion:^(BOOL finished) {

                isTransted = YES;

            }];

            

            //变换控制器

            _selectedIndex = sender.tag;

        }

       

        for (BarItem *btn in_toolView.subviews)

        {

            if ([btn isKindOfClass:[BarItem class]])

            {

                btn.selected = NO;

                NSString *normal = [NSString stringWithFormat:@"TabItem%d_0",btn.tag - 1];

                [btn setImage:LOADIMAGE(normal, @"png") forState:UIControlStateNormal];

            }

        }

        

        

        BarItem *btn1 = (BarItem *)[_toolView viewWithTag:sender.tag];

        NSString *selected = [NSString stringWithFormat:@"NewTabItem%d_1",sender.tag - 1];

        [btn1 setImage:LOADIMAGE(selected, @"png") forState:UIControlStateNormal];

        btn1.selected = YES;

    }

     

     

    这里的BarItem是一个自定义的button

     

    大家尝试吧。其实还有比这更好的,那个是封装的,资源code4App里有。

  • 相关阅读:
    JavaScript类型转换
    JavaScript中的 typeof,null,和undefined
    JavaScript循环
    JavaScript条件语句
    JavaScript运算符
    JavaScript字符串
    JavaScript事件
    JavaScript对象,函数,作用域
    JavaScript基础
    数值数据的特征预处理
  • 原文地址:https://www.cnblogs.com/leevaboo/p/3556796.html
Copyright © 2011-2022 走看看