presentModalViewController和navigationController

时间:2011-04-20 09:44:33

标签: iphone ios4 uinavigationcontroller presentmodalviewcontroller

我想知道

之间的区别

[self presentModalViewController:controller animated:YES];

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

我已经使用了两者,但仍然不知道或注意到差异。什么时候应该使用其中一个?

谢谢..

3 个答案:

答案 0 :(得分:3)

基本差异:

pushViewController仅适用于导航控制器

presentModalViewController适用于所有视图控制器

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

答案 1 :(得分:2)

呈现模态视图是在另一个视图的顶部呈现视图。您通常执行那些需要以自包含方式启动和完成的“任务”。请继续阅读有关Apple开发人员指南的模态视图。

将视图推送到导航控制器是不同的,因为在应用程序中存在逻辑上的导航需求。像在iDevices的设置应用程序中那样说一个向下钻取表,其中有主要设置,然后您深入到子设置等。

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

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

答案 2 :(得分: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中编写函数来推送另一个viewController。

-(IBAction)btnNext_click {
    SecondViewController * objSecondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
    [self.navigationController pushViewController:objSecondViewController animated:YES];
}