【问题标题】:Adding a UINavigationController to a view-based application将 UINavigationController 添加到基于视图的应用程序
【发布时间】:2012-08-24 07:03:58
【问题描述】:

所以,我开始在 Xcode 3.2.5 中以完全基于视图的方式开发应用程序,然后升级到 Xcode 4.4。我有一个 NIB 文件(两个,MainWindow.xib 和我的默认视图控制器的 .xib)。我有一堆视图控制器,直到现在我一直通过presentModalViewController 展示。

问题是,现在我希望其中一个视图是基于导航的,也就是说,当用户进入它时,他们会获得顶部导航栏,并且从那时起他们所做的一切都是通过导航控制器。当他们完成并完全退出时,他们会回到常规的非导航控制器使用视图。

这似乎是一个没有人完全描述答案的常见问题。无论是那个还是像How to add a navigation controller to a view-based application? 这样看起来很有帮助的回复对我来说都太模糊了。我基本上是在寻找有关如何将UINavigationController 添加到项目中以仅显示其中的一些视图的分步说明。

【问题讨论】:

    标签: objective-c xcode uiviewcontroller uinavigationcontroller


    【解决方案1】:

    如果您的视图已按预期工作,则将导航控制器添加到模态视图非常简单。

    NewViewController *newView = [[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
    UINavigationController *navView = [[UINavigationController alloc] initWithrootViewController:newView];
    [self presentModalViewController:navView animated:YES];
    

    您的模态视图将继承导航栏和在该模态中呈现更多视图的所有属性。完成模式后,只需将其关闭即可。

    在导航控制器上加载更多视图非常简单。

    AnotherViewController *anotherView = [[AnotherViewController alloc] initWithNibName:@"AnotherViewController" bundle:nil];
    [self.navigationController pushViewController:anotherView animated:YES];
    

    手动从堆栈中弹出视图控制器:

    // note, you won't need to call this for the auto created back button, that is handled for you
    // this would only be if you wanted manual control over going back outside the back button
    [self.navigationController popViewControllerAnimated:YES];
    

    一旦你完成了模态视图,你可以从任何地方调用它来让它消失,让你回到原来的视图。方便用于多个详细信息屏幕、注册过程等。

    [self.navigationController dismissModalViewControllerAnimated:YES];
    

    【讨论】:

    • 嗨,Bill,假设我有一个按钮,按下该按钮会显示我想在其中使用导航控制器的视图。当有人按下该按钮时,此代码会进入触发的方法吗?另外,这是否意味着我想要使用导航控制器的视图除了我的应用程序的默认视图控制器预先存在的默认 .xib 文件之外,还有它自己的整个 .xib 文件?
    • 是的,此代码将进入按钮按下方法。导航控制器不需要单独的 .xib。您将要加载的视图将进入导航控制器,因此您的视图将向下移动以为导航栏腾出空间。此方法应该完全按照您的需要工作。根据我的代码加载它,看看它是什么样子的。我将更新我的答案,向您展示如何将其他视图推送到堆栈中。
    • 感谢您的编辑!我已经让它工作了。这很棒。我的做法略有不同,我没有调用AnotherViewController *anotherView = [[AnotherViewController alloc] initWithNibName:@"AnotherViewController" bundle:nil]; 之类的东西,而是将AnotherView 声明为IBOutlet 并通过Interface Builder 将其连接起来。但除此之外,代码效果很好,我推送到导航堆栈的视图会像你说的那样继承顶部栏。我剩下的唯一问题是如何让后退按钮说“后退”而不是上一个视图的标题?
    • 这就是它在这里的工作方式。如果喜欢我的回答,欢迎采纳。很高兴我能帮上忙。
    • 您可以设置视图的标题以及导航控制器上的后退按钮标题。应该是这里某个地方的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2011-09-25
    • 1970-01-01
    • 2011-09-23
    • 2023-03-31
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多