(一)、自定义TabBaratom
系统默认自带的底部TabBarcode
①、建立自定义IWTabBar,继承UIView类orm
建立IWTabBar.m继承
// // IWTabBar.m // ItcastWeibo // // Created by kaiyi on 16-1-27. // Copyright (c) 2016年 kaiyi. All rights reserved. // #import "IWTabBar.h" @implementation IWTabBar - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code } return self; } -(void)addTabBarButtonWithItem:(UITabBarItem *)item { // 1.建立按钮 UIButton *button = [[UIButton alloc] init]; [self addSubview:button]; // 2.设置数据 [button setTitle:item.title forState:UIControlStateNormal]; [button setImage:item.image forState:UIControlStateNormal]; [button setImage:item.selectedImage forState:UIControlStateSelected]; } // 按钮frame -(void)layoutSubviews { [super layoutSubviews]; CGFloat buttonH = self.frame.size.height; CGFloat buttonW = self.frame.size.width / self.subviews.count; CGFloat buttonY = 0; for(int index = 0; index < self.subviews.count; index++){ // 1.取出按钮 UIButton *button = self.subviews[index]; // 2.设置按钮的frame CGFloat buttonX = index * buttonW; button.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH); } } @end
②、在IWTabBarViewController.m中引入建立的自定义IWTabBar.h文件图片
// // IWTabBarViewController.m // ItcastWeibo // // Created by kaiyi on 16-1-20. // Copyright (c) 2016年 kaiyi. All rights reserved. // #import "IWTabBarViewController.h" #import "IWHomeViewController.h" #import "IWMessageViewController.h" #import "IWDiscoverViewController.h" #import "IWMeViewController.h" #import "UIImage+KY.h" #import "IWTabBar.h" // TabBar @interface IWTabBarViewController () /** * 自定义的tabbar */ @property (nonatomic, weak) IWTabBar *customTabBar; @end @implementation IWTabBarViewController - (void)viewDidLoad { [super viewDidLoad]; // 初始化TabBar [self setupTabbar]; // 初始化全部的子控制器 [self setupAllChildViewControllers]; } // 在该方法中打印看下tabbar中都有哪些子控件,打印查看,而后移除 -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // NSLog(@"%@", self.tabBar.subviews); // 移除自带的Tabbar,保留自定义的customTabbar for(UIView *child in self.tabBar.subviews){ // NSLog(@"%@", child.superclass); if([child isKindOfClass:[UIControl class]]) { [child removeFromSuperview]; } } } // 初始化TabBar -(void)setupTabbar { IWTabBar *customTabBar = [[IWTabBar alloc] init]; customTabBar.backgroundColor = [UIColor redColor]; // customTabBar.frame = self.tabBar.frame; // [self.view addSubview:customTabBar]; // 自定义的tabbar彻底盖住原有默认的tabbar customTabBar.frame = self.tabBar.bounds; [self.tabBar addSubview:customTabBar]; self.customTabBar = customTabBar; } // 将全部的初始化自控制器抽出成一个方法,而后在启动时自动调用 -(void)setupAllChildViewControllers { // 初始化全部的子控制器(首页,消息,广场,我)每一个控制器的内容都不同,因此每一个自控制器实现本身的业务逻辑 // 1.首页 IWHomeViewController *home = [[IWHomeViewController alloc] init]; // 自定义的重构的公共方法 [self setupChildViewController:home title:@"首页" imageName:@"tabbar_home" selectedImageName:@"tabbar_home_selected"]; // 2.消息 IWMessageViewController *message = [[IWMessageViewController alloc] init]; // 自定义的重构的公共方法 [self setupChildViewController:message title:@"消息" imageName:@"tabbar_message_center" selectedImageName:@"tabbar_message_center_selected"]; // 3.发现 IWDiscoverViewController *discover = [[IWDiscoverViewController alloc] init]; // 自定义的重构的公共方法 [self setupChildViewController:discover title:@"广场" imageName:@"tabbar_discover" selectedImageName:@"tabbar_discover_selected"]; // 4.我 IWMeViewController *me = [[IWMeViewController alloc] init]; [self setupChildViewController:me title:@"我" imageName:@"tabbar_profile" selectedImageName:@"tabbar_profile_selected"]; } /** *(重构方法)初始化一个子控制器 * * @param childVc 须要初始化的子控制器 * @param title 标题 * @param imageName 图标 * @param selectedImageName 选中的图标 * */ -(void)setupChildViewController:(UIViewController *)childVc title:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName { // 1.设置控制器的一些属性 childVc.title = title; // 设置图标 childVc.tabBarItem.image = [UIImage imageWithName:imageName]; // 设置选中的图标 if(IOS7) { // 若是为IOS7不要渲染为蓝色, imageWithRenderingMode,注意:该方法在IOS6中报错。==== imageWithName 使用 === childVc.tabBarItem.selectedImage = [[UIImage imageWithName:selectedImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; } else { // IOS6中不须要对选中的图片进行渲染 childVc.tabBarItem.selectedImage = [UIImage imageWithName:selectedImageName]; } // 2.包装一个导航控制器 UINavigationController *Nav = [[UINavigationController alloc] initWithRootViewController:childVc]; [self addChildViewController:Nav]; // 添加子控制器 // 3.添加tabbar内部的按钮 [self.customTabBar addTabBarButtonWithItem:childVc.tabBarItem]; } @end
2、删除系统自带的Tabbarrem
①、能够打印看下tabbar中都有哪些子控件it
NSLog(@"%@", self.tabBar.subviews);io
// 在该方法中打印看下tabbar中都有哪些子控件,打印查看,而后移除 -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // NSLog(@"%@", self.tabBar.subviews); // 移除自带的Tabbar,保留自定义的customTabbar for(UIView *child in self.tabBar.subviews){ // NSLog(@"%@", child.superclass); if([child isKindOfClass:[UIControl class]]) { [child removeFromSuperview]; } } }
移除默认TabBar后ast