学习笔记:UITabBarController使用详解
一、手動創建UITabBarController
最常見的創建UITabBarController的地方就是在application delegate中的?applicationDidFinishLaunching:方法,因為UITabBarController通常是作為整個程序的rootViewController的,我們需要在程序的window顯示之前就創建好它,具體步驟如下:
1、創建一個UITabBarController對象
2、創建tabbarcontroller中每一個tab對應的要顯示的對象
3、通過UITabBarController的viewController屬性將要顯示的所有content viewcontroller添加到UITabBarController中
4、通過設置UITabBarController對象為window.rootViewController,然后顯示window
下面看一個簡單的例子:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];// Override point for customization after application launch.SvTabBarFirstViewController *viewController1, *viewController2;
viewController1 = [[SvTabBarFirstViewController alloc] initWithNibName:nil bundle:nil];viewController1.title = @"First";viewController2 = [[SvTabBarFirstViewController alloc] initWithNibName:nil bundle:nil];viewController2.title = @"Second";self.tabBarController = [[[UITabBarController alloc] init] autorelease];self.tabBarController.delegate = self;self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
[viewController1 release];[viewController2 release];self.window.rootViewController = self.tabBarController;[self.window makeKeyAndVisible];return YES; }
?
二、UITabBarItem
UITabBar上面顯示的每一個Tab都對應著一個ViewController,我們可以通過設置viewcontroller.tabBarItem屬性來改變tabbar上對應的tab顯示內容。否則系統將會根據viewController的title自動創建一個,該tabBarItem只顯示文字,沒有圖像。當我們自己創建UITabBarItem的時候,我們可以顯示的指定顯示的圖像和對應的文字描述。當然還可以通過setFinishedSelectedImage:withFinishedUnselectedImage:方法給選中狀態和飛選中狀態指定不同的圖片。下面看個自己創建UITabBarItem的小例子:
UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Second" image:nil tag:2]; [item setFinishedSelectedImage:[UIImage imageNamed:@"second.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"first.png"]]; viewController2.tabBarItem = item; [item release];此外UITabBarItem還有一個屬性badgeValue,通過設置該屬性可以在其右上角顯示一個小的角標,通常用于提示用戶有新的消息,使用很簡單,后面有例子。
?
三、moreNavigationController
UITabBar上最多可以顯示5個Tab,當我們往UITabBarController中添加超過的viewController超過5個時候,最后一個一個就會自動變成,按照設置的viewControlles的順序,顯示前四個viewController的tabBarItem,后面的tabBarItem將不再顯示。當點擊more時候將會彈出一個標準的navigationViewController,里面放有其它未顯示的的viewController,并且帶有一個edit按鈕,通過點擊該按鈕可以進入類似與ipod程序中設置tabBar的編輯界面。編輯界面中默認所有的viewController都是可以編輯的,我們可以通過設置UITabBarController的customizableViewControllers屬性來指定viewControllers的一個子集,即只允許一部分viewController是可以放到tabBar中顯示的。但是這塊兒要注意一個問題就是每當UITabBarController的viewControllers屬性發生變化的時候,customizableViewControllers就會自動設置成跟viewControllers一致,即默認的所有的viewController都是可以編輯的,如果我們要始終限制只是某一部分可編輯的話,記得在每次viewControlles發生改變的時候,重新設置一次customizableViewControllers。
四、UITabBarController的Rotation
UITabBarController默認只支持豎屏,當設備方向放生變化時候,它會查詢viewControllers中包含的所有ViewController,僅當所有的viewController都支持該方向時,UITabBarController才會發生旋轉,否則默認的豎向。
此處需要注意當UITabBarController支持旋轉,而且發生旋轉的時候,只有當前顯示的viewController會接收到旋轉的消息。
?
五、UITabBar
? UITabBar自己有一些方法是可以改變自身狀態,但是對于UITabBarController自帶的tabBar,我們不能直接去修改其狀態。任何直接修改tabBar的操作將會拋出異常,下面看一個拋出異常的小例子:
self.tabBarController = [[[UITabBarController alloc] init] autorelease]; self.tabBarController.delegate = self; self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, viewController3, nil];self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible];self.tabBarController.tabBar.selectedItem = nil;上面代碼的最后一行直接修改了tabBar的狀態,運行程序回得到如下結果:
?
六、Change Selected Viewcontroller
改變UITabBarController中當前顯示的viewController,可以通過一下兩種方法:
1、selectedIndex屬性
通過該屬性可以獲得當前選中的viewController,設置該屬性,可以顯示viewControllers中對應的index的viewController。如果當前選中的是MoreViewController的話,該屬性獲取出來的值是NSNotFound,而且通過該屬性也不能設置選中MoreViewController。設置index超出viewControllers的范圍,將會被忽略。
2、selectedViewController屬性
通過該屬性可以獲取到當前顯示的viewController,通過設置該屬性可以設置當前選中的viewController,同時更新selectedIndex。可以通過給該屬性賦值
tabBarController.moreNavigationController可以選中moreViewController。
3、viewControllers屬性
設置viewControllers屬性也會影響當前選中的viewController,設置該屬性時UITabBarController首先會清空所有舊的viewController,然后部署新的viewController,接著嘗試重新選中上一次顯示的viewController,如果該viewController已經不存在的話,會接著嘗試選中index和selectedIndex相同的viewController,如果該index無效的話,則默認選中第一個viewController。
?
七、UITabBarControllerDelegate
通過代理我們可以監測UITabBarController的當前選中viewController的變化,以及moreViewController中對編輯所有viewController的編輯。通過實現下面方法:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;該方法用于控制TabBarItem能不能選中,返回NO,將禁止用戶點擊某一個TabBarItem被選中。但是程序內部還是可以通過直接setSelectedIndex選中該TabBarItem。
下面這三個方法主要用于監測對moreViewController中對view controller的edit操作
- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers;- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed;- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed;
七、附件UITabBarController測試程序源碼
?
SvTabBarAppDelegate.h這個頭文件,折疊后加進去,總是無法展開,望大家見諒!?
// // SvTabBarAppDelegate.h // SvTabBarControllerSample // // Created by maple on 5/19/12. // Copyright (c) 2012 smileEvday. All rights reserved. //#import <UIKit/UIKit.h>@interface SvTabBarAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>@property (strong, nonatomic) UIWindow *window;@property (strong, nonatomic) UITabBarController *tabBarController;@end轉載于:https://www.cnblogs.com/lmg4819/p/4813768.html
總結
以上是生活随笔為你收集整理的学习笔记:UITabBarController使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android非空格式验证框架Valid
- 下一篇: 两道有趣的面试题