nib實現標籤導航ios
在目前的Xcode(4.5)版本建立標籤導航的應用可使用工程模板 Tabbed Application。咱們能夠選擇故事板或nib技術實現。故事板建立當然簡單,但這種實現方式屏蔽了標籤導航不少技術細節,爲了更有益於咱們學習, 在實現環節咱們分別採用了nib技術和storyboard技術。首先咱們來看看用nib技術實現的過程。數組
使用「Tabbed Application」模版建立一個名爲 「TabNavigationNib」的工程。注意不要勾選「Use Storyborads」。app
工 程有兩個畫面,其中FirstViewController.h和FirstViewController.m是第一個畫面的視圖控制 器,first.png和first@2x.png是標籤上的圖標,first.png是普通屏幕須要圖標,first@2x.png是視網膜顯示屏幕需 要圖標。Second View的畫面與FirstView相似。ide
爲了與咱們的應用對應, 咱們須要將模板生成的視圖控制器作一些修改。首先,修改視圖控制器的名稱,修改類名最好使用Xcode提供的工具,它會將有依賴關係全部代碼所有修改(程 序中硬編碼的字符串部分除外)。打開FirstViewController.h文件,在代碼中雙擊鼠標選中要從新命名的類名 FirstViewController,右鍵菜單Refactor→Rename,而後會出現從新輸入名字的對話框,輸入要修改的類名 「HeiViewController」,接着還有一個預覽對話框,若是沒有問題點擊「Save」按鈕保存修改。採用一樣的方法將 SecondViewController改成JiViewController。工具
因爲使 用工程模板預先生成了兩套視圖控制器,城市信息須要三個視圖控制器,咱們能夠在模版生成的兩個視圖控制器的基礎上再增長一個視圖控制器 「LiaoViewController」,在菜單中選擇File->New->File… ,在文件模板中選擇iOS→Objective-C出現新建文件對話框,在Class項目中輸入 「LiaoViewController」,Subclass of 中選擇UIViewController,勾選With XIB for user interface。學習
這個視圖控制器建立成功後,爲了可以把視圖可以很好的放到標籤欄應 用中,須要在視圖的底部添加標籤欄控件,這個控件佔有49point,選中視圖打開屬性檢查器,選擇Buttom Bar爲Tab Bar,這樣視圖的下面就會出現一個黑框。這樣作的目的是爲了在設計畫面時候提醒咱們不要把其它控件放置到標籤欄中,不然運行的時候該部分控件就會被標籤 欄遮擋。編碼
將三個視圖設計爲下圖所示的效果,拖拽一些Label控件,擺放好位置,修改爲圖中所示的城市的名字,而後再修改視圖背景的顏色。spa
完成的時候還須要更換圖標,刪除原來的四個圖標文件,將本書提供的源代碼工程的icons文件夾添加到本工程中。設計
下面咱們看看代碼部分,應用程序委託對象AppDelegate.m有關代碼以下:code
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- UIViewController *viewController1 = [[HeiViewController alloc] initWithNibName:@」HeiViewController」 bundle:nil];
- UIViewController *viewController2 = [[JiViewController alloc] initWithNibName:@」JiViewController」 bundle:nil];
- UIViewController *viewController3 = [[LiaoViewController alloc] initWithNibName:@」LiaoViewController」 bundle:nil];
- self.tabBarController = [[UITabBarController alloc] init];
- self.tabBarController.viewControllers = @[viewController1, viewController2,viewController3];
- self.window.rootViewController = self.tabBarController;
- [self.window makeKeyAndVisible];
- return YES;
- }
這 部分代碼是在應用啓動的時候調用的,若是是採用故事板構建的話,該方法中沒有這部分代碼。委託對象有一個屬性tabBarController,它是是 UITabBarController類型。UITabBarController是標籤欄視圖控制器,它的一個重要屬性是 viewControllers是NSArray數組類型,用於存放全部是標籤欄視圖控制器所控制的各個模塊的視圖控制器。而後經過 self.window.rootViewController = self.tabBarController把標籤欄視圖控制器放入到window的根視圖中。window、標籤欄控制器和模塊視圖控制器之間的關係。
應用程序委託對象中的window是UIWindow的實例,每一個應用都只有一個UIWindow對象,做爲應用的「窗口」,「窗口」中的根視圖控制器是標籤欄控制器。
咱們再看一個模塊的視圖控制器HeiViewController.m有關代碼:
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- self.title = @」黑龍江」;//NSLocalizedString(@」First」, @」First」);
- self.tabBarItem.p_w_picpath = [UIImage p_w_picpathNamed:@"hei"];
- }
- return self;
- }
這是視圖控制器的構造方法,在這個方法中self.title設定了標籤欄中的標籤的文字, self.tabBarItem.p_w_picpath設定了標籤欄中的圖標。其它的兩個視圖控制器與此相似這裏再也不介紹。
代碼編寫完畢,運行以後的結果。