UINavigationController:最简单的例子

Dan*_*ark 6 iphone objective-c

我正在尝试做一个非常简单的UINavigationController示例.这是我的代码:

- (void)viewDidLoad {
  [super viewDidLoad];
Run Code Online (Sandbox Code Playgroud)

下一行有效,或者至少不会爆炸.

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

  PageOneController *one = [[[PageOneController alloc]init] autorelease];
Run Code Online (Sandbox Code Playgroud)

示例1.本行没有任何内容

  [navController pushViewController:one animated:NO];
Run Code Online (Sandbox Code Playgroud)

示例2.此行工作(但当然没有导航控制器)

  [self.view addSubview:one.view];
}
Run Code Online (Sandbox Code Playgroud)

为什么我无法将ViewController实例推送到navController并看到屏幕更改?

注意:我意识到我的概念可能会倒退,而且我不需要让我的视图引用某个UINavigationController......或者其他东西.

epl*_*oko 13

- (void)viewDidLoad {
    [super viewDidLoad];

    PageOneController *one = [[[PageOneController alloc]init] autorelease];
    one.title = @"blah";
    navController = [[UINavigationController alloc] initWithRootViewController:one];
    [self.view addSubview:navController.view];
}
Run Code Online (Sandbox Code Playgroud)

其背后的基本思想是导航控制器的根视图控制器是控制器,该视图将首先显示在导航控制器层次结构中.根控制器不是您将导航控制器插入的视图控制器.希望这可以帮助.


Dan*_*ark 5

我只是重申 @E-ploko 的答案,这是 100% 正确的(这就是为什么我将其标记为最佳答案)。

您需要更多视图(和视图控制器)才能使用UINavigationController. 其中一个包含UINavigationControllerrootViewController是该系列的第一页(没有“背面”的那一页)。

我摆脱了代码示例的外部依赖关系:显然这是整体示例代码,而不是整体真实代码。

- (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];
}
Run Code Online (Sandbox Code Playgroud)