如何将多个视图控制器推送到导航控制器上
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 方法从视图控制器推送到导航视图控制器?