你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS運用開辟中UITabBarController標簽欄掌握器應用進階

iOS運用開辟中UITabBarController標簽欄掌握器應用進階

編輯:IOS開發綜合

做了這麼長時光的IOS開辟了,最根本的UITabBarController和UINavigationController都用了好長時光了,老是改現成的代碼,或許各類自界說控件的修正,用的都有些凌亂了,呵呵。照樣本身做個demo再溫習一下吧,記載上去以備後續翻查。
1、UITabBarController和UINavigationController的結合應用

這類辦法最多見,似乎普通有tabbar都邑有naviBar。普通應用,

1. 在appDelegate外面創立UITabBarController; 預備好ViewControllerArray等其它數據變量;
[/code]
UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
    tabBarController.delegate = nil;

UINavigationController *naviController = nil; 
    NSMutableArray *controllerArray = [[NSMutableArray alloc] initWithCapacity:3];
[/code]

2.創立每一個tab對應的viewController和以該viewController為根視圖掌握器的UINavigationController; 將naviController添加到數組中; 定制每一個UITabBarItem,可以設置圖片、文字、標志等;

以下:tab1和tab3的創立相似 

SecondTabViewController *secondController = [[SecondTabViewController alloc] initWithStyle:UITableViewStylePlain]; 
    naviController = [[UINavigationController alloc] initWithRootViewController:secondController]; 
    //    UITabBarItem *secondTab = [[UITabBarItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"tab2.png"] tag:2]; 
    UITabBarItem *secondTab = [[UITabBarItem alloc] initWithtabBarSystemItem:UITabBarSystemItemFeatured tag:2]; 
    naviController.tabBarItem = secondTab; 
    secondController.navigationItem.title = @"second tab"; 
    [secondTab release]; 
    [controllerArray addObject:naviController]; 
    [naviController release]; 
    [secondController release];</span> 

3. 將viewController數組設置給tabBarController,tabBarController添加到窗口顯示。

tabBarController.viewControllers = controllerArray; 
    [controllerArray release]; 
     
    [self.Window addSubview:tabBarController.view];

完成,顯示後果以下。

201631292645938.gif (336×506)

4. UITabBarController和naviController不是必定綁定在一路用的。

naviController.tabBarItem = secondTab;

 從下面這句話便可以看出來,我懂得這句才是將tab和viewController銜接起來的症結,然則每一個UIViewController自己都邑主動創立一個tabBarItem,是以secondController.tabBarItem = secondTab也是可以的,這便可以完成只要UITabBarController,而沒有naviController。以下圖所示

201631292706814.gif (329×506)

UITabBarController.h中的相干界說,可以驗證這類用法。

@interface UIViewController (UITabBarControllerItem) 
 
@property(nonatomic,retain) UITabBarItem *tabBarItem; // Automatically created lazily with the view controller's title if it's not set explicitly. 

2、UITabBar和UITabBarItem的一些設置。

  設置UITabBar的配景,網下流傳最多的辦法是掏出UITabBar以後,對其layer層的contents屬性停止修正,將其設置為自界說的一張配景圖片,以下面注目失落的代碼。不外看了頭文件以後我認為這類辦法似乎挺奇異的,固然也沒幾句代碼,不外感到不消這麼龐雜吧??掏出UITabBar以後直接設置backgroundImage不就好了麼?也許有潛伏成績我不曉得吧,先懂得有這類辦法吧,以備不時之需。

UITabBar *tabBar = (UITabBar*)[[tabBarController.view subviews] objectAtIndex:1]; 
    //tabBar.layer.contents = (id)[UIImage imageNamed:@"tabbar_background.png"].CGImage; 
    tabBar.backgroundImage = [UIImage imageNamed:@"tabbar_background.png"];


UITabBarItem有兩種初始化方法,本代碼中應用的是設置體系tab類型,另外一種更經常使用的應當是定制tab題目和圖片,如上正文失落的語句。

//UITabBarItem *secondTab = [[UITabBarItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"tab2.png"] tag:2]; 
    UITabBarItem *secondTab = [[UITabBarItem alloc] initWithtabBarSystemItem:UITabBarSystemItemFeatured tag:2];

可以經由過程上面的函數設置選中、未選中的圖片; 字符串badgeValue是可以在tab右上角的白色小圓圈內的文字內容

<span >    [firstTab setFinishedSelectedImage:[UIImage imageNamed:@"tab1_selected.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"tab1.png"]]; 
    firstTab.badgeValue = @"3";

201631292725543.gif (323×55)

這幾個控件的屬性不多,還有可以UITabBar選中的圖片、色彩等等,經由過程頭文件正文看到的,沒有現實應用,年夜概應用辦法都差不多。


3、自界說UITabBar

現實任務中,照樣用純潔的自界說TabBar的情形更多,在此先寫寫思緒,整頓好代碼再來記載。

第一種思緒,也是我如今應用的,自界說TabBar繼續UIView,每一個tab是一個button,從而可以設置選中/未選中的圖片,將button都添加到TabBar外面,button的點擊事宜便可以作為tab能否被選中的觸發事宜,經由過程delegate告訴裡面究竟選中了哪一個tab。

第二種思緒,既然UITabBar自己就是UIView的子類,應當可以重寫drawRect函數完整自繪吧,這也是一種思緒,似乎一些開源代碼也是如許做的。


還有一些情形,能夠應用UIToolBar來取代TabBar更適合,toolBar可以設置自界說的view,那就好辦了,估量弄個UIActivityIndicatorView之類的設置上去都行,下一步要看看這塊的文檔和代碼,測驗考試一下,寫了demo再來記載。


4、總結UITabBarController的留意點
應用UITabBarController和應用普通的掌握器一樣,好比可以設置

self.Window.rootViewController = tabBarController;

應用addChildViewController辦法可以給其添加子掌握器。每一個子掌握器對應一個UITabBarButton,也就是在UITabBarController上面的選項。此時假如想要轉變UITabBarButton的內容,好比想要設置title, image等外容,須要在其對應的子掌握器外面經由過程修正tabBarItem的屬性來設置內容。

// JYViewController.m -> 是UITabBarController的子掌握器
- (void)viewDidLoad
{
    [super viewDidLoad];

      self.tabBarItem.title = @"選項1";
      self.tabBarItem.badgeValue = @"1";
}

這一點和UINavigationController是相似的,在應用UINavigationController的時刻,我們在以後顯示的掌握器(也就是棧頂的掌握器)中經由過程修正navigationItem來設置導航欄中的內容。
self.navigationItem.leftBarButtonItem = ...;
也就是說,應用UINavigationController和UITabBarController的時刻:
在其對應的掌握器外面修正導航欄和tabBar的內容。
經由過程修正tabBarItem和__navigationItem__的屬性來設置導航欄和tabBar的內容。其實tabBarItem和navigationItem屬於模子(從NSObject繼續,以...Item開頭的可以都推想為模子?),此時我們經由過程修正模子來修正view中顯示的內容。
當UINavigationController和UITabBarController同時應用的時刻,假如讓navigationController作為self.Window.rootViewController,然後再讓tabBarController成為navigationController的子掌握器,這麼做是正當的,然則會有一些成績。
由於後面說過,navigationBar上顯示的內容是經由過程在其以後顯示的子掌握器中修正的,然則此時navigationController直接顯示的子掌握器是tabBarController,所以當進入分歧的界面的時刻,我們願望navigationBar上的內容(好比title)轉變,然則此時是做不到的,由於我們沒法在UITabBarController中修正navigationBar的內容。
所以普通來講我們會讓tabBarController作為根掌握器,假如其他自界說的子掌握器須要navigationController,那末就讓每一個自界說的掌握器對應的navigationController作為tabBarController的子掌握器,然後讓自界說的掌握器作為navigationController的子類。如許便可以在自界說掌握器中修正navigationController的navigationBar顯示內容。
 

【iOS運用開辟中UITabBarController標簽欄掌握器應用進階】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved