在IPHONE上,NAV和TAB混合使用的案例不少.但不少書籍都沒詳細介紹這個是怎麼使用的.我也找了好久才弄清楚怎麼作.如今分享給你們.編程
1.先創建一個Window-based Application 項目. app
2.加入一個Tab Bar Controller,在library-objects拖動TabBar到MainWindwo.xib.以下圖框架
在代碼中加入Tabbar變量,ide
頭文件:函數
@interface tabNavTestAppDelegate : NSObject <UIApplicationDelegate> {動畫
UIWindow *window;atom
UITabBarController *rootController;spa
}
.net
@property (nonatomic, retain) IBOutlet UIWindow *window;翻譯
@property (nonatomic,retain) IBOutlet UITabBarController *rootController;
@end
m文件:
@synthesize rootController;
#pragma mark -
#pragma mark Application lifecycle
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self.windowaddSubview:rootController.view];
[self.windowmakeKeyAndVisible];
returnYES;
}
而後在mainWindow.xib鏈接Tab控件到Tab Nav Test App Delegate便可.編譯後,能夠看到Tab已經能夠顯示了.
3.加入一個Navigation Controller到Tab控件,在objects拖動Nav控件到Tab控件裏面,如圖:
拖進去之後,咱們能看到NAV控件出如今TAB控件裏面了.如圖:
咱們能夠修改Navigation Bar的內容,把"Root View Controller"改成"CCBASE.NET",
加入Navigation Bar之後會看到有個UIViewController也加入了.咱們須要給他作關聯才能使用,如今項目裏面加入UIViewController subclass,加入的時候注意不要XIB文件.
此處加入的類名爲firstView.加入之後,點擊Nav控件的ViewControl,在inspector裏面選擇最後一個Tab,
如圖:
把Class改成剛加入的firstView.這樣就把他們關聯了.就能夠寫代碼了.在這個View裏面加入一個按鈕,而後把他和firstrView關聯起來.而後寫個點擊函數.在加入函數
前咱們還須要加入一個UIViewController,做爲下一層頁面.加入的類爲nextView.而後就能夠寫點擊函數了.以下代碼:
- (IBAction)btnAction1
{
//生成一個nextView的類
nextView *anotherViewController = [[nextViewalloc] initWithNibName:@"nextView"bundle:nil];
//當顯示下一個View時,要隱藏底部的Tab Bar,若是不須要隱藏,能夠去掉代碼
anotherViewController.hidesBottomBarWhenPushed=YES;
//動畫調用nextView
[self.navigationControllerpushViewController:anotherViewController animated:YES];
[anotherViewController release];
}
好了.這樣基本就可使用這個NAV和TAB混合的程序了.效果圖以下:
你們都看到效果圖的"返回"按鈕了吧,加入以下代碼,效果和點擊左上部的按鈕是同樣的,都是返回上一層,以下:
[self.navigationControllerpopViewControllerAnimated:YES];
-----------------------------------------------
官網關於混合控制器使用文檔翻譯:
UIKit框架爲實現你的應用程序界面,只提供了少許的標準視圖控制器:
1.普通視圖控制器(或者表視圖控制器)自己包含有視圖集,能夠經過這個視圖集來展現你要的界面。
2.導航控制器經過分層次導航來處理多視圖控制器。
3.標籤控制器以不一樣的操做應用程序模式來處理多視圖控制器。
4.split視圖控制器
你能夠單獨的用這些控制器中的一個,也能夠聯合使用這些控制器創造出更加複雜的界面。當聯合使用這些控制器時,各項的順序只有遵循上面的列表順序纔有意義。總的規則是,每一個視圖控制器能夠包含在列表中處於它前面的視圖控制器。以此,導航控制器可以包含普通視圖控制器,標籤控制器可以包含導航控制器和普通視圖控制器。反過來,導航控制器不可以包含標籤控制器把它做爲導航界面的一部分。這樣產生的界面會使用戶疑惑,由於標籤不能一直保持可見。
由於模態的視圖控制器會打破這個順序,因此他們會遵循不一樣的規則。在任什麼時候候,你能夠包含幾乎任何的視圖控制器。在一個普通的視圖控制器裏模態地包含標籤控制器或者導航控制器不會讓人產生疑惑。新的界面取代了父界面,儘管只是暫時取代。
如下部分會告訴你,怎樣在你的iOS應用程序中聯合表視圖,導航視圖,標籤視圖控制器。
在標籤控制器界面上添加導航控制器
使用標籤控制器的應用程序能夠在一個或者多個標籤中使用導航控制器。當在同一個界面裏聯合使用這兩種視圖控制器時,標籤控制器就像是全部導航控制器的包裹。你毫不會想把標籤控制器壓入到導航控制器的導航棧裏。真這麼作,就會出現一種意外狀況,只有當某個特定的視圖控制器在導航棧頂部的時候標籤欄纔會顯示出來。標籤欄是被設計成固定的,而這種變更的方法就會讓用戶產生疑惑。
使用標籤控制器最經常使用的方法是把它的視圖嵌入到你的應用程序的主窗口中。全部,下面部分教你怎麼配置你的應用程序主窗口包含一個標籤控制器和一個或多個導航控制器。下面的例子,有編程實現和用IB實現。若是你想模態地顯示一個標籤控制器,建議你用編程方法建立相關對象。
注意:當在標籤欄界面裏嵌入導航控制器時,你只能嵌入普通的UINavigationController對象,而且不能是基於UINavigationController類的系統視圖控制器。儘管系統提供了定製的用於選擇通信錄,選擇圖片和實現其餘行爲的導航控制器,可是這些視圖控制器被設計成模態展現。對於怎樣使用特定的視圖控制器,請查閱相關類的文檔。
在IB中建立對象
在nib中組合標籤控制器和導航控制器的過程相對來講比較直接。惟一有區別的是如何在標籤控制器和導航控制器中創建聯繫。若是單獨用標籤控制器或者導航控制器,則每一個控制器都是做爲應用程序窗口的根視圖。而若是組合使用它們,那麼只有標籤控制器做爲根視圖。導航控制器再也不作爲根視圖控制器,而是做爲標籤欄界面中某一個標籤的根視圖。
圖7-1顯示了,你須要在nib文件中建立的對象。這個例子中,前三個標籤欄用普通視圖控制器,最後一個用一個導航控制器。還有一個普通視圖控制器做爲導航控制器的根視圖控制器加入。爲了更好的管理內存,每一個普通的視圖控制器(包括導航控制器的根視圖控制器)用一個nib文件保存相應的視圖。
假設你是從通常主nib文件(一個不包含標籤控制器的nib文件)開始,你能夠在IB中參照圖7-1用如下步驟來建立這些對象:
1.從庫裏把標籤控制器拖到你的IB文檔窗口。
當你在nib文件里加入標籤控制器,IB也爲你添加了一個標籤視圖,兩個根視圖控制器,兩個標籤選項(每一個視圖控制器對應一個)。
2.用輸出口保存標籤控制器的一個索引。
爲了在運行時得到標籤控制器,你要麼用一個輸出口,要麼你必須在加載nib文件時顯式地獲得nib文件的頂級對象。用輸出口是一個比較簡單的方法。給標籤控制器和窗口添加輸出口,你要在應用程序委託(application delegate)的頭文件裏包含下面相似的代碼:
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
UITabBarController* tabBarController;
UIWindow *window;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end
添加完輸出口定義後,建立一個從這個輸出口到標籤控制器的一個鏈接。
3.接着前面的步驟,在應用程序委託(application delegate)的實現文件裏添加相似下面的代碼:
@synthesize window;
@synthesize tabBarController;
4.添加一個視圖控制器對象和一個導航控制器對象到標籤控制器。
嵌入到標籤控制器的視圖控制器數量決定着標籤欄界面裏顯示的標籤的數量。由於初始的標籤控制器已經有了兩個視圖控制器,你只須要再加一個視圖控制器對象(UIViewController)和一個導航控制器對象(UINavigationController)。
如下其中一個步驟,添加視圖控制器:
從庫裏拖出合適的對象到標籤上。
在IB文檔窗口(document window),從庫裏拖出對象,添加到標籤控制器。窗口必須是大綱模式(outline mode)。
添加導航控制器,你能夠從庫裏拖出合適的對象,或者選擇標籤控制器對象,而後經過屬性查看器來配置你的視圖控制器的類型。這兩種方法均可以添加正確的視圖控制器類型到你的nib文件。
要刪除視圖控制器,在編輯框裏(edit surface)或者文檔窗口(document window)選中視圖控制器對象,而後按delete鍵。
5.調整視圖控制器到你想要標籤欄顯示的順序
你能夠經過拖拽顯示在標籤欄控制器上的標籤來重排視圖控制器(和相應的標籤)。儘管edit surface顯示了全部的標籤,可是在運行時只有五個顯示。若是你的標籤控制器包含六個或更多視圖控制器,在初始時,只能顯示四個標籤。標籤欄的最後一個選項是保留給More視圖控制器的,用來表示還有視圖控制器沒有顯示。
6.配置視圖控制器
對每一個根視圖控制器,你要配置如下屬性:
用身份查看器設置每一個普通視圖控制器。對於通常的視圖控制器對象,把類名改成你想在標籤內容裏顯示的定製子類。不要改變導航控制器對象類自身,可是必定要設置嵌入到導航控制器裏的定製視圖控制器。
爲每一個視圖控制器提供一個視圖。
描述:圖7-1 nib文件中混合使用導航控制器和標籤控制器
圖片:1.jpg