2010-06-19 118 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]; 
}