要点:1、在底部添加加号按钮 2、设置导航栏属性
1、weibo底部的button其中四个按钮是一样的,其中中间的加号需要另外做处理
tablebar是自己定义的 ,代码如下
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // 删除系统自动生成的UITabBarButton for (UIView *child in self.tabBar.subviews) { if ([child isKindOfClass:[UIControl class]]) { [child removeFromSuperview]; } } } /** * 初始化tabbar */ - (void)setupTabbar { IWTabBar *customTabBar = [[IWTabBar alloc] init]; customTabBar.frame = self.tabBar.bounds; customTabBar.delegate = self; [self.tabBar addSubview:customTabBar]; self.customTabBar = customTabBar; }
[self.customTabBar addTabBarButtonWithItem:childVc.tabBarItem];
IWTabBar
- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { if (!iOS7) { // 非iOS7下,设置tabbar的背景 self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithName:@"tabbar_background"]]; } // 添加一个加号按钮 UIButton *plusButton = [UIButton buttonWithType:UIButtonTypeCustom]; [plusButton setBackgroundImage:[UIImage imageWithName:@"tabbar_compose_button"] forState:UIControlStateNormal]; [plusButton setBackgroundImage:[UIImage imageWithName:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted]; [plusButton setImage:[UIImage imageWithName:@"tabbar_compose_icon_add"] forState:UIControlStateNormal]; [plusButton setImage:[UIImage imageWithName:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted]; plusButton.bounds = CGRectMake(0, 0, plusButton.currentBackgroundImage.size.width, plusButton.currentBackgroundImage.size.height); [self addSubview:plusButton]; self.plusButton = plusButton; } return self; }当add bar items 的时候layoutSubviews就会重新算下位置,
- (void)layoutSubviews { [super layoutSubviews]; // 调整加号按钮的位置 CGFloat h = self.frame.size.height; CGFloat w = self.frame.size.width; self.plusButton.center = CGPointMake(w * 0.5, h * 0.5); // 按钮的frame数据 CGFloat buttonH = h; CGFloat buttonW = w / self.subviews.count; CGFloat buttonY = 0; for (int index = 0; index<self.tabBarButtons.count; index++) { // 1.取出按钮 IWTabBarButton *button = self.tabBarButtons[index]; // 2.设置按钮的frame CGFloat buttonX = index * buttonW; if (index > 1) { buttonX += buttonW; } button.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH); // 3.绑定tag button.tag = index; } }
2、设置导航栏属性
内容包括:导航栏的文字属性,rightItem 属性, pushViewController
思路:设置导航栏的时候不能分个设置,包装成一个类,让这个类管理所有的属性如何汇总成一个类呢
// 2.包装一个导航控制器 IWNavigationController *nav = [[IWNavigationController alloc] initWithRootViewController:childVc]; [self addChildViewController:nav];
// // IWNavigationController.m // ItcastWeibo // // Created by apple on 14-5-6. // Copyright (c) 2014年 itcast. All rights reserved. // #import "IWNavigationController.h" @interface IWNavigationController () @end @implementation IWNavigationController /** * 第一次使用这个类的时候会调用(1个类只会调用1次) */ + (void)initialize { // 1.设置导航栏主题 [self setupNavBarTheme]; // 2.设置导航栏按钮主题 [self setupBarButtonItemTheme]; } /** * 设置导航栏按钮主题 */ + (void)setupBarButtonItemTheme { UIBarButtonItem *item = [UIBarButtonItem appearance]; // 设置背景 if (!iOS7) { [item setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [item setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background_pushed"] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; [item setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background_disable"] forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault]; } // 设置文字属性 NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary]; textAttrs[UITextAttributeTextColor] = iOS7 ? [UIColor orangeColor] : [UIColor grayColor]; textAttrs[UITextAttributeTextShadowOffset] = [NSValue valueWithUIOffset:UIOffsetZero]; textAttrs[UITextAttributeFont] = [UIFont systemFontOfSize:iOS7 ? 14 : 12]; [item setTitleTextAttributes:textAttrs forState:UIControlStateNormal]; [item setTitleTextAttributes:textAttrs forState:UIControlStateHighlighted]; } /** * 设置导航栏主题 */ + (void)setupNavBarTheme { // 取出appearance对象 UINavigationBar *navBar = [UINavigationBar appearance]; // 设置背景 if (!iOS7) { [navBar setBackgroundImage:[UIImage imageWithName:@"navigationbar_background"] forBarMetrics:UIBarMetricsDefault]; [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque; } // 设置标题属性 NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary]; textAttrs[UITextAttributeTextColor] = [UIColor blackColor]; textAttrs[UITextAttributeTextShadowOffset] = [NSValue valueWithUIOffset:UIOffsetZero]; textAttrs[UITextAttributeFont] = [UIFont boldSystemFontOfSize:19]; [navBar setTitleTextAttributes:textAttrs]; } - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if (self.viewControllers.count > 0) { viewController.hidesBottomBarWhenPushed = YES; } [super pushViewController:viewController animated:animated]; } @end