585
技術社區[雲棲]
iOS開發那些事-nib實現標簽導航
nib實現標簽導航
在目前的Xcode(4.5)版本創建標簽導航的應用可以使用工程模板 Tabbed Application。我們可以選擇故事板或nib技術實現。故事板創建固然簡單,但這種實現方式屏蔽了標簽導航很多技術細節,為了更有益於我們學習, 在實現環節我們分別采用了nib技術和storyboard技術。首先我們來看看用nib技術實現的過程。
使用“Tabbed Application”模版創建一個名為 “TabNavigationNib”的工程。注意不要勾選“Use Storyborads”。
工 程有兩個畫麵,其中FirstViewController.h和FirstViewController.m是第一個畫麵的視圖控製 器,first.png和first@2x.png是標簽上的圖標,first.png是普通屏幕需要圖標,first@2x.png是視網膜顯示屏幕需 要圖標。Second View的畫麵與FirstView類似。
為了與我們的應用對應, 我們需要將模板生成的視圖控製器做一些修改。首先,修改視圖控製器的名稱,修改類名最好使用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控件,擺放好位置,修改成圖中所示的城市的名字,然後再修改視圖背景的顏色。
完成的時候還需要更換圖標,刪除原來的四個圖標文件,將本書提供的源代碼工程的icons文件夾添加到本工程中。
下麵我們看看代碼部分,應用程序委托對象AppDelegate.m有關代碼如下:
- (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.image = [UIImage imageNamed:@"hei"]; } return self; }
這是視圖控製器的構造方法,在這個方法中self.title設定了標簽欄中的標簽的文字, self.tabBarItem.image設定了標簽欄中的圖標。其它的兩個視圖控製器與此類似這裏不再介紹。
代碼編寫完畢,運行之後的結果。
最後更新:2017-04-03 22:15:29