2

我想知道两者之间的区别

[self presentModalViewController:controller animated:YES];

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

我都使用过,但仍然不知道或注意到其中的区别。什么时候应该使用其中之一?

谢谢..

4

3 回答 3

3

基本区别:

pushViewController仅适用于导航控制器

presentModalViewController适用于所有视图控制器

navigationController是您的实例,UINavigationController导航堆栈 ( UIViewController) 中的所有控制器都使用它。

于 2011-04-20T09:51:59.940 回答
2

呈现模态视图是在另一个视图之上呈现一个视图。您通常执行那些需要以自包含方式开始和完成的“任务”。进一步阅读苹果开发者指南上的模态视图。

将视图推送到导航控制器是不同的,在应用程序中有逻辑需要导航的情况下。在 iDevices 的设置应用程序中说一个向下钻取表,其中有主要设置,然后向下钻取到子设置等。

无论您的问题是什么,如果它们是概念性的和通用的,我强烈建议您搜索“X 编程指南”,它将带您到正确的 Apple 编程指南 :) X = 视图控制器在您的情况下

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

于 2011-04-20T09:50:20.930 回答
2

如果基类有它自己的 NavigationController 那么你可以写:

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

如果您的基类只有 UIViewController 然后使用:

MyViewController * objMyViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:objMyViewController];
navController.navigationItem.leftBarButtonItem  = nil;  // make nil if you want
                                                        // to use it in next View
[self presentModalViewController:navController animated:YES];

现在,MyViewController 具有导航功能,因此您可以通过在 MyViewController 中编写如下函数来推送另一个视图控制器。

-(IBAction)btnNext_click {
    SecondViewController * objSecondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
    [self.navigationController pushViewController:objSecondViewController animated:YES];
}
于 2011-07-11T17:37:55.207 回答