UI整理-----part9--標簽控制器(tabBarController)

来源:http://www.cnblogs.com/8023huihui/archive/2016/03/13/5213962.html
-Advertisement-
Play Games

1.UITabBarController:和UINavigationController類似,也可以輕鬆管理多個控制器,輕鬆完成空間之間的轉換。 2.UITabBarController的使用: (1)使用步驟:          <1>初始化UITabBarController          


1.UITabBarController:和UINavigationController類似,也可以輕鬆管理多個控制器,輕鬆完成空間之間的轉換。

2.UITabBarController的使用:

(1)使用步驟:

         <1>初始化UITabBarController

         <2>設置UIWindow的rootViewController為UITabBarController

         <3>創建相應的子控制器(viewController)

         <4>把子控制器添加到UITabBarController

(2)代碼演示:

3.重要說明:

(1)UITabBar:視圖控制器裡面包含了一個tabbar的控制項(即下方的工具條),如果UITAbBar有N個控制器,那麼UITabBar內部就會有N個UITabBarButton作為子控制項與之對應(預設使用的UITabBarButton在UITabBar中的位置是均分的,UITabBar的高度是49)。如果控制項數多於5個,就會在TabBar的右端產生一個“More”,把前面4個顯示出來,之後的在“More”中,位置是可以交換的。

(2)UITabBarButton:UITabBarButton裡面顯示什麼內容,由對應的子控制器中TabBarItem屬性來決定

(3)向TabBarController中添加子控制器的兩種方法:

如果  tabBarC.selectedIndex = 1;  則設置第二個視圖為預設選項卡

 

4.如果使用系統給定樣式:

   <1>通過在UITabBarItem初始化時調用- (instancetype)initWithTabBarSystemItem:(UITabBarSystemItem)systemItemtag:(NSInteger)tag; 方法可以設置標簽項目。

   <2>系統標簽項目列表:

    typedefNS_ENUM(NSInteger, UITabBarSystemItem) {

    UITabBarSystemItemMore,              當標簽條中的圖片數超過5個時會顯示此標簽,點擊此標簽會顯示未顯示的圖標

    UITabBarSystemItemFavorites,               個人收藏內容

    UITabBarSystemItemFeatured,                程式推薦內容

    UITabBarSystemItemTopRated,                 評價高的內容

    UITabBarSystemItemRecents,                  最近訪問的內容 

    UITabBarSystemItemContacts,                    通訊錄界面

    UITabBarSystemItemHistory,                 歷史記錄內容

    UITabBarSystemItemBookmarks,                    書簽內容

    UITabBarSystemItemSearch,                 搜索界面

    UITabBarSystemItemDownloads,                     下載中/下載完成的內容

    UITabBarSystemItemMostRecent,                       最新內容

    UITabBarSystemItemMostViewed,                       人氣最高的內容

    };

 

   5.標簽欄屬性

   

6.自定義標簽欄

//1. 在視圖將要顯示的時候,將tabBar原生的button去除
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    
    for (UIView *view in self.tabBar.subviews) {
        
        if ([view isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
            
            [view removeFromSuperview];
        }
    }
}

//2.創建自定義的tabBar
- (void)viewDidLoad {
    [super viewDidLoad];
    
    _newTabBar.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 49);

    [self.tabBar addSubview:_newTabBar];
    
}

//3.覆寫下麵方法,添加自定義的control
- (void)setViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers{
    
    //目的是告訴系統需要創建的controller數量
    [super setViewControllers:viewControllers];
    
    //自定義controller
    [self creatNewControllerWithSelectImageName:SelectImageName];
    
    
}


- (void)creatNewControllerWithSelectImageName:(NSString *)selectImageName
{
    //創建的control的寬度
    CGFloat controlWidth = [UIScreen mainScreen].bounds.size.width/self.viewControllers.count;
    //初始化選中的control的背景視圖
    _selectImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,controlWidth, 49)];
    _selectImage.image = [UIImage imageNamed:selectImageName];
    
    [_newTabBar addSubview:_selectImage];

    
    //首先通過for迴圈瞭解產生controller的數量
    for (int i = 0; i < self.viewControllers.count; i ++) {
        
        
        //自定義控制項
        UIControl *newControl = [[UIControl alloc] initWithFrame:CGRectMake(i * controlWidth, 0, controlWidth, 45)];
        
        //將自定義的tabBarButton 添加到 自定義的tabBar上
        [_newTabBar addSubview:newControl];
        
        //添加點擊效果
        [newControl addTarget:self action:@selector(controlAction:) forControlEvents:UIControlEventTouchUpInside];

        //通過設置tag方便傳值
        newControl.tag = 1000 + i;
        
        //得到當前的控制器
        UIViewController *viewC = [self.viewControllers objectAtIndex:i];
        
        //拿到之前的圖片和信息
        UIImageView *imageView = [[UIImageView alloc] init];
        imageView.image = viewC.tabBarItem.image;
        
        UILabel *label = [[UILabel alloc] init];
        label.text = viewC.tabBarItem.title;
        
        
    }
}



//
- (void)controlAction:(UIControl *)control
{
    self.selectedIndex = control.tag - 1000; //通過獲得的tag值進行切換ViewController
    
    //移動動畫效果的實現
    [UIView animateWithDuration:.4 animations:^{
        _selectImage.center = control.center;
    }];
}


/*
 細節很重要
  (1)用tabBar的selectedIndex屬性,可以讓自己創建的按鈕關聯到ViewController
  (2)取消系統的高亮:可以定義一個按鈕,覆寫裡面的setHighlied方法,什麼也不做就行了
  (3)關於幾個按鈕只選中一個的方法:設置一個屬性,記錄上一個選中的按鈕,點擊當前按鈕,把上一個按鈕設置為未選中,並把當前的按鈕設置為選中,最後把當前按鈕賦值給上一個按鈕
 
 */

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...