【问题标题】:Creating a UINavigationController for the first UIViewController为第一个 UIViewController 创建一个 UINavigationController
【发布时间】:2015-02-05 17:31:49
【问题描述】:

似乎有几种方法可以创建UINavigationController 作为第一个控制器。也许最简单的方法是简单地单击 Storyboard 中的 View Controller 并将其嵌入到导航控制器中。但我想知道仅在代码中执行此操作时的最佳方法。

您可以继承UINavigationController,导入第一个视图控制器,并在viewDidLoad allocinit 中添加一个实例,然后将其添加为childViewController。在 Storyboard 中,将默认视图控制器替换为导航控制器,并将类设置为您的导航控制器。请注意,在以前的 iOS 版本中,不建议将 UINavigationController 子类化。

或者你可以创建另一个UIViewControlleralloc init第一个视图控制器,然后alloc init一个UINavigationController以那个视图控制器为根,添加导航控制器作为这个视图控制器的子视图控制器,并将导航控制器的视图添加为此视图控制器的视图的子视图。在 Storyboard 中更改视图控制器的类。这是一个尴尬的设置,因为您创建了一个视图控制器,其目的是添加一个导航控制器,但它本身不是导航控制器。

我读过另一种方法,它涉及在AppDelegate 中创建UINavigationController。也许还有更多的解决方案。

什么是最合适的方法,在最新的开发环境中工作,以 iOS 8+ 为目标?

【问题讨论】:

  • “最佳”是一个主观的东西。您对什么具体情况感兴趣?您是在谈论不使用情节提要,还是在情节提要中包含要嵌入导航控制器的初始视图控制器?
  • 为什么不在情节提要中进行,并在应用程序委托中查看它为您生成的代码。然后你会看到它是如何完成的。第一个控制器是您在情节提要中选择的作为属性检查器中初始控制器的控制器。
  • @rdelmar 尽可能保持默认故事板不变,在代码中执行所有操作。如果可以将其完全删除,那在这种情况下最好。

标签: ios uiviewcontroller uinavigationcontroller


【解决方案1】:

如果您从情节提要中的控制器开始,您只需在应用程序委托中添加两行即可将该控制器嵌入到导航控制器中。如果你想用代码来做,我认为这是最简单的方法,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.window.rootViewController];
    self.window.rootViewController = nav;
    return YES;
}

如果您想完全在代码中完成,没有情节提要,那么您需要创建窗口、导航控制器及其根视图控制器。您还需要单击文件列表中的项目图标,然后在“常规”选项卡中,从“主界面”下拉菜单中删除单词“main”(该条目告诉系统从名为“main”的故事板开始.storyboard”)。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    ViewController *vc = [ViewController new]; // You need to create this controller's view in its loadView method
    vc.title = @"Root View Controller";
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
    [self.window setRootViewController:nav];
    [self.window makeKeyAndVisible];
    return YES;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2013-12-26
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多