2010-06-19 160 views
5

我想要做一個UINavigationController的非常簡單的例子。這裏是我的代碼:UINavigationController:最簡單的例子

- (void)viewDidLoad { 
    [super viewDidLoad]; 

這下一行工作,或者至少不爆炸。

navController = [[UINavigationController alloc] initWithRootViewController:self]; 
    self.title = @"blah"; 

    PageOneController *one = [[[PageOneController alloc]init] autorelease]; 

實施例1 THIS LINE不執行任何

[navController pushViewController:one animated:NO]; 

例2 THIS LINE WORKS(但沒有導航控制器,當然)

[self.view addSubview:one.view]; 
} 

爲什麼無法推ViewController實例添加到navController並查看屏幕更改?

注:我意識到,我可能有我的概念和向後我並不需要有我的看法引用UINavigationController ......什麼的。

回答

11
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    PageOneController *one = [[[PageOneController alloc]init] autorelease]; 
    one.title = @"blah"; 
    navController = [[UINavigationController alloc] initWithRootViewController:one]; 
    [self.view addSubview:navController.view]; 
} 

基本思想背後它是一個導航控制器的根視圖控制器是哪個視圖將在導航控制器層次第一顯示控制器。根控制器不是您將導航控制器插入的視圖控制器。希望這可以幫助。

+0

完美答案。謝謝,祝你好運。 – 2010-06-20 20:04:07

4

我只是重申@ E-ploko的答案,這是100%正確的(這就是爲什麼我標記爲最佳答案)。

您需要更多的視圖(和視圖控制器)才能使用UINavigationController。其中之一房屋UINavigationController,其rootViewController是該系列的第一頁(沒有「回」)。

我擺脫了代碼示例的外部依賴:顯然這是單片示例代碼,而不是單片實際代碼。

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIViewController *one = [[UIViewController alloc] init]; 

    [one.view setBackgroundColor:[UIColor yellowColor]]; 
    [one setTitle:@"One"]; 

    navController = [[UINavigationController alloc] initWithRootViewController:one]; 
    // here 's the key to the whole thing: we're adding the navController's view to the 
    // self.view, NOT the one.view! So one would be the home page of the app (or something) 
    [self.view addSubview:navController.view]; 

    // one gets reassigned. Not my clearest example ;) 
    one = [[UIViewController alloc] init]; 

    [one.view setBackgroundColor:[UIColor blueColor]]; 
    [one setTitle:@"Two"]; 

    // subsequent views get pushed, pulled, prodded, etc. 
    [navController pushViewController:one animated:YES]; 
}