我想知道
之间的区别 [self presentModalViewController:controller animated:YES];
和
[self.navigationController pushViewController:controller animated:YES];
我已经使用了两者,但仍然不知道或注意到差异。什么时候应该使用其中一个?
谢谢..
答案 0 :(得分:3)
基本差异:
pushViewController
仅适用于导航控制器
presentModalViewController
适用于所有视图控制器
navigationController 是UINavigationController
的实例,导航堆栈中的所有控制器都使用该实例(UIViewController
)。
答案 1 :(得分:2)
呈现模态视图是在另一个视图的顶部呈现视图。您通常执行那些需要以自包含方式启动和完成的“任务”。请继续阅读有关Apple开发人员指南的模态视图。
将视图推送到导航控制器是不同的,因为在应用程序中存在逻辑上的导航需求。像在iDevices的设置应用程序中那样说一个向下钻取表,其中有主要设置,然后您深入到子设置等。
无论你的问题是什么,如果它们是概念性的和通用的,我强烈建议你谷歌“X编程指南”,它将带你到正确的Apple编程指南:) X =你的情况下的视图控制器< / p>
答案 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];
}