如何将多个视图控制器推送到导航控制器上

Posted

技术标签:

【中文标题】如何将多个视图控制器推送到导航控制器上【英文标题】:How to push multiple view controllers onto navigation controller 【发布时间】:2012-02-05 15:34:28 【问题描述】:

新手在这里编写我的第一个应用程序(已经制作了几个教程应用程序)。我正在使用一个名为“RootViewController”的视图控制器作为导航控制器。我已经使用以下命令成功地将另一个视图控制器推到了上面,称为“ClientListViewController”:

[self.navigationController pushViewController:clientListViewController animated:YES];

我现在在 ClientListViewController 中并尝试将另一个视图控制器推送到名为“AddClientViewController”的堆栈上。我想让它成为 UIModalPresentationFormSheet 形式的模态视图控制器。我正在尝试使用上述命令的变体来推送新的视图控制器,但我不知道如何替换“自我”。我试过了:

[RootViewController.navigationController pushViewController:AddClientViewController animated:YES];

还有……

[[RootViewController navigationController] pushViewController:AddClientViewController animated:YES];

以及这些组合中的每一个都使用小“R”作为词根。还是没有运气。

为清楚起见,我在实现文件的顶部使用了以下代码。

#import "AddClientViewController.h"

我是否以正确的方式处理这个问题,还是应该使用全新的导航控制器来添加它?

收到的任何指针。

非常感谢

【问题讨论】:

【参考方案1】:

每个UIViewController 都有一个名为navigationController 的属性。此属性指的是最近的封闭UINavigationController,如果有的话。所以你可以在你的ClientListViewController中说self.navigationController

ios 中,我们通常将类名大写。所以听起来AddClientViewController 是一个类名。您需要拥有该类的实例才能将其推送到导航控制器的堆栈中。像这样的:

AddClientViewController *addClientVC = [[AddClientViewController alloc] init];
[self.navigationController pushViewController:addClientViewController animated:YES];

您可能需要使用不同的初始化方法或设置addClientVC 的一些属性,然后再推送它;这取决于您对AddClientViewController 的实现。

如果您想以模态方式呈现它,则不要将其推送到导航控制器的堆栈中。相反,您可以这样做:

AddClientViewController *addClientVC = [[AddClientViewController alloc] init];
addClientVC.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:addClientVC animated:YES completion:nil];

【讨论】:

以上是关于如何将多个视图控制器推送到导航控制器上的主要内容,如果未能解决你的问题,请参考以下文章

如何检查视图控制器是不是以模态方式呈现或推送到导航堆栈上?

如何快速将需求视图控制器推送到导航控制器

从标签栏按钮将视图控制器推送到导航控制器上

如何使用 prepareForSegue 方法从视图控制器推送到导航视图控制器?

SWRevealViewController推送到实际的导航控制器

将 UITableViewController 推送到导航堆栈时看不到导航栏