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

时间:2012-02-05 15:34:28

标签: ios uinavigationcontroller

新手在这里编程我的第一个应用程序(已经制作了几个教程应用程序)。我使用一个名为'RootViewController'的视图控制器作为导航控制器。我已经使用命令

成功地在另一个名为'ClientListViewController'的视图上推送了另一个视图控制器
[self.navigationController pushViewController:clientListViewController animated:YES];

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

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

和...

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

以及这些组合中的每一个使用小的'R'代表单词Root。仍然没有运气。

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

#import "AddClientViewController.h"

我是以正确的方式接近这个,还是应该使用全新的导航控制器将其添加到?

任何指针都很受欢迎。

非常感谢

1 个答案:

答案 0 :(得分:3)

每个UIViewController都有一个名为navigationController的属性。此属性引用最近的封闭UINavigationController(如果有)。因此,您只需在self.navigationController中说出ClientListViewController

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

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

在推送之前,您可能需要使用不同的init方法或设置addClientVC的某些属性;这取决于您AddClientViewController的实施情况。

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

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