iOS開發那些事-nib實現標籤導航

來源:互聯網
上載者:User

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設定了標籤欄中的表徵圖。其它的兩個視圖控制器與此類似這裡不再介紹。

代碼編寫完畢,運行之後的結果。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.