2011-07-12 56 views
0

我想使用UINavigationController,但我不確定如何。到目前爲止(大約一年),我一直在使用presentModalViewController並關閉ModalViewController來呈現/關閉視圖控制器。UINavigationController - 基礎

所以,這就是我所做的。我的主視圖控制器(第一個在啓動時顯示)被稱爲MainViewController,並且它擴展了UIViewController。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    MainViewController *controller = [[MainViewController alloc] init]; 
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller]; 
    [self.window addSubview:navigationController.view]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

在我MainViewController的viewDidLoad方法:

所以我在我的應用程序委託作出這個發射功能

- (void)viewDidLoad { 

     [super viewDidLoad]; 

     self.title = @"Title"; 
     self.navigationController.navigationBar.tintColor = [Constants barColor]; 

      ....more code... 
    } 

但是,在我的MainViewController,我想提出另一種觀點控制器調用SecondViewController,它需要帶有後退箭頭按鈕的UINavigationBar。那麼,我是否通過在viewDidLoad方法中設置title和backButton來使SecondViewController擴展UIViewController並執行相同的操作?我該如何展示它?我該怎麼做才能做到這一點?

回答

1

你需要設置一個根視圖控制器,它最容易從蘋果模板開始。

這裏就是神奇發生了:

UIViewController *controller = [[UIViewController alloc] initWithNibName:@"MyNib" bundle:nil]; 
[self.navigationController pushViewController:controller animated:YES]; 
[controller release]; 

導航控制器爲你做(後退按鈕,標題,動畫)所有的工作 - 它跟蹤!


我的工作流程是這樣的:

設置MutableArray在viewDidLoad中,添加了控制器到它,比如:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
MyCustomViewController *customView = [[MyCustomViewController alloc] initWithNibName:@"nib" bundle:@"nil"]; 
customView.title = @"Second Level"; 
[array addObject:customView]; 
self.controllers = array; 

然後在您的委託:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSUInteger row = [indexPath row]; 
    UIViewController *childControllerToBe = [controllers objectAtIndex:row]; 
    [self.navigationController pushViewController:childControllerToBe animated:YES]; 
} 

此,以及更多可以通過閱讀一本像樣的初學者書籍,如Beginning iPhone Development

此外,apple docs總是好的:)

+0

等待,但我把這段代碼放在UIViewController中。我收到警告「UINavigationController可能不響應pushViewController」 – CodeGuy

+0

在UIViewController中是一樣的,你只需設置一個按鈕(或任何其他事件),然後在該方法中創建子控制器,然後推送它,不需要數組(這是標準的tableView方法)。 - 那真是奇怪的警告,你能顯示你的代碼嗎? –

0

你應該推到導航堆棧。

斯坦福大學的iPhone課程Lecture將教你很多關於導航欄。 (這是一個快速閱讀)

基本上在它的心臟,你需要這樣的代碼:

[self.navigationController pushViewController:SecondView]; 

您可以使用PopViewController回去編程,但會自動創建後退按鈕。

以下是演講中的一些source code。它涵蓋了你正在遇到的問題。

1

UINavigationController是UIViewController的子類,但與UIViewController不同,它通常不適合您繼承子類。這是因爲導航控制器本身很少被定製超出導航欄的視覺效果。UINavigationController的一個實例可以用代碼或XIB文件相對容易地創建。 請訪問「How to add UINavigationController Programmatically