iOS_25_彩票骨架搭建+導航欄適配 – iPhone手機開發技術文章 iPhone軟體開發教學課程

最終效果圖:

vcD4KPHA+TWFpbi5zdG9yeWJvYXJkPC9wPgo8cD48aW1nIHNyYz0=”https://www.aiwalls.com/uploadfile/Collfiles/20140828/2014082808443471.png” alt=”\”>

初始化的控制器是:導航控制器

它的根控制器是:TabBarController

TabBarController的底部是一個自定義的TabBar

裡面添加瞭5個TabBarItem

點擊每一個item,

會將tabBar上的對應item的子控制器的navigationItem的值,

轉移(賦值,復制)給TabBarController的navigationItem,

從而顯示在導航欄上,

因為TabBarController就是導航控制器的根控制器,也同時就是棧頂控制器,導航控制器
隻知道它的存在

//
//  BeyondTabBarController.m
//  25_彩票
//
//  Created by beyond on 14-8-27.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondTabBarController.h"
#import "BeyondTabBar.h"
#import "BeyondTabBarItem.h"
#import "BeyondTabBarDelegate.h"
@interface BeyondTabBarController ()

@end

@implementation BeyondTabBarController


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 1.釜底抽薪  直接刪除默認的tabBar
        [self.tabBar removeFromSuperview];
        
        // 2.創建tabbar
        BeyondTabBar *myTabBar = [[BeyondTabBar alloc] init];
        // 占位原來的tabBar
        myTabBar.frame = self.tabBar.frame;
        // 代理設置後,可以接收tabBar內部按鈕的點擊狀態切換
        myTabBar.delegate = self;
        // 添加到當前控制器的view
        [self.view addSubview:myTabBar];
        
        // 3.由於 圖片名的規律性,一次性添加5個tabBarItem按鈕
        for (int i = 1; i<=5; i++) {
            NSString *normal = [NSString stringWithFormat:@"TabBar%d", i];
            NSString *selected = [normal stringByAppendingString:@"Sel"];
            // 調用tabBar開放出來的接口,向tabBar內部添加按鈕,隻要傳參:圖片名
            [myTabBar addOneTabBarItem:normal selectedIconName:selected];
        }
    });
}

#pragma mark - tabbar代理方法
- (void)tabBar:(BeyondTabBarItem *)tabBar didSelectButtonFrom:(NSUInteger)from to:(NSUInteger)to
{
    // 1.直接通過索引  選中某個控制器(這個是UITabBarController自帶的API)
    self.selectedIndex = to;
    
    UITableViewController *newVC = self.childViewControllers[to];
    // 2.將tabBar上的對應按鈕的子控制器的navigationItem值轉移給TabBarController,因為導航控制器的根控制器就是TabBarController,導航控制器 隻知道它的存在
    [self.navigationItem copyFromItem:newVC.navigationItem];
}@end

導航欄的適配

隻需提供64高和44高的背景圖片即可

//
//  BeyondNavigationController.m
//  25_彩票
//
//  Created by beyond on 14-8-27.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondNavigationController.h"

@interface BeyondNavigationController ()

@end

@implementation BeyondNavigationController

#pragma mark 一個類隻會調用一次
+ (void)initialize
{
    // 1.取出設置主題的對象
    UINavigationBar *navBar = [UINavigationBar appearance];
    UIBarButtonItem *barItem = [UIBarButtonItem appearance];
    
    // 2.設置導航欄的背景圖片
    NSString *navBarBg = nil;
    // 判斷iOS7
    // [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0
    if (iOS7) {
        // 使用64高度的圖片,做導航欄背景圖片
        navBarBg = @"NavBar64";
        // 設置導航欄的漸變色為白色(iOS7中返回箭頭的顏色變為這個顏色:白色)
        navBar.tintColor = [UIColor whiteColor];
    } else {
        // 非iOS7,使用44高度的圖片
        navBarBg = @"NavBar";
        // 黑色的頂部狀態條
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
        // 設置導航欄按鈕的背景圖片
        [barItem setBgImgForNormal:@"NavButton" highlighted:@"NavButtonPressed"];
        
        // 設置導航欄返回按鈕的背景圖片
        [barItem setBackBtnBgImgForNormal:@"NavBackButton" highlighted:@"NavBackButtonPressed"];
    }
    
    [navBar setBackgroundImage:[UIImage imageNamed:navBarBg] forBarMetrics:UIBarMetricsDefault];
    
    // 3.設置導航欄標題顏色為白色
    [navBar setTitleTextAttributes:@{
                                     NSForegroundColorAttributeName : [UIColor whiteColor]
                                     }];
    
    // 4.設置導航欄按鈕文字顏色為白色
    [barItem setTitleTextAttributes:@{
                                      NSForegroundColorAttributeName : [UIColor whiteColor],
                                      NSFontAttributeName : [UIFont systemFontOfSize:13]
                                      } forState:UIControlStateNormal];
}


#pragma mark 控制狀態欄的樣式
/*
 狀態欄的管理:
 1> iOS7之前:UIApplication
 2> iOS7開始:交給對應的控制器去管理
 */
- (UIStatusBarStyle)preferredStatusBarStyle
{
    // 白色樣式
    return UIStatusBarStyleLightContent;
}

@end

發佈留言