自定义UITabbar和navigationBar

来源:互联网 发布:无风险套利知乎 编辑:程序博客网 时间:2024/05/23 17:13

一.UITabbar创建步骤:
1.移除系统自带的UITabbar,注意要在视图将要出现时调用,否则无效.(写在viewDidLoad中失败的原因:
在使用storyboard中搭建三级控制器的时候:
在viewDidLaod中移除后,storyboard还没有加载完.当再加载二级控制器的时候,会从新给他添加上tabBar和btn.)

2.自定义UITabbar

二.自定义UITabbar和navigationBar的代码实现:

//  MainTabBarController.h//  WXMovie//  Created by bing on 16/7/18.//  Copyright © 2016年 bing. All rights reserved.#import <UIKit/UIKit.h>@interface MainTabBarController : UITabBarController@end
//  MainTabBarController.m//  WXMovie//  Created by bing on 16/7/18.//  Copyright © 2016年 bing. All rights reserved.#import "MainTabBarController.h"#import "WXTabBarButton.h"#import "Common.h"@interface MainTabBarController (){    UIImageView *selectImageV; //选中滑块}@end@implementation MainTabBarController//视图已经加载完成后- (void)viewDidLoad {    [super viewDidLoad];    //1 移除tabbarButton//    [self _removeTabBarButton];    //2 自定义TabBar    [self _customTabBar];    //3 自定义navigationBar    [self _customNavigationBar];}//视图将要出现-(void)viewWillAppear:(BOOL)animated{    [super viewWillAppear:animated];/* 写在viewDidLoad中失败的原因: 在使用storyboard中搭建三级控制器的时候: 在viewDidLaod中移除后,storyboard还没有加载完.当再加载二级控制器的时候,会从新给他添加上tabBar和btn. */    //移除自带UITabbar    [self _removeTabBarButton];}//移除自带UITabbar的方法-(void)_removeTabBarButton{    for (UIView *view in self.tabBar.subviews) {        Class class =NSClassFromString(@"UITabBarButton");        if ([view isKindOfClass:class]) {            [view removeFromSuperview];        }    }}-(void)_customTabBar{    //1 背景图片    self.tabBar.backgroundImage = [UIImage imageNamed:@"tab_bg_all"];    //2 标题    NSArray *titles =@[@"首页",@"新闻",@"Top",@"影院",@"更多"];    //3 button上的图片    NSArray *imageNames =@[@"movie_home",@"msg_new",@"start_top250",@"icon_cinema",@"more_setting"];    //4 button的宽度    float buttonWidth =KScreenWidth/titles.count;    //5 选中图片    selectImageV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 55, 50)];    selectImageV.image = [UIImage imageNamed:@"selectTabbar_bg_all1"];    [self.tabBar addSubview:selectImageV];//    6  创建5个button    for (int i =0; i<titles.count; i++) {        NSString *title = titles[i];        NSString *imageName = imageNames[i];        CGRect frame = CGRectMake(i*buttonWidth, 0, buttonWidth, 49);        WXTabBarButton *button = [[WXTabBarButton alloc]initWithFrame:frame withImageName:imageName withTitle:title];        button.tag = 1000+i;        [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];         //当首次的时候,确定滑块的位置        if (i ==0) {            selectImageV.center = button.center;        }        [self.tabBar addSubview:button];    }}-(void)buttonAction:(UIButton*)btn{    //1 界面切换    self.selectedIndex =btn.tag-1000;    //2 滑块的切换    [UIView animateWithDuration:0.3 animations:^{            selectImageV.center = btn.center;         }];}-(void)_customNavigationBar{    //1 遍历每个导航控制器 5个navigationBar//    for (UINavigationController *navi in self.viewControllers) {//        //        [navi.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav_bg_all-64"] forBarMetrics:UIBarMetricsDefault];//    }    //2 使用appearance   UINavigationBar    //作用:可以改变UINavigationBar的默认的样式.    //只有改代码执行之后,默认的样式才改变    [[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"nav_bg_all-64"] forBarMetrics:UIBarMetricsDefault];  }@end

创建效果:
这里写图片描述

0 0