presentModalViewController:animated:
The presentViewController:animated:completion: method is the preferred way to present a modal view as of iOS 5.0.
程序示例:(Context:self是嵌入在UINavigationController中的子控制器,)
//////////////////////////// Demo1 //////////////////////////////
UIViewController *vc = [[MyController alloc] init];
[self presentViewController:vc animated:YES completion:NULL];
NSLog(@"%@", self.presentedViewController); //MyController
NSLog(@"%@", self.presentingViewController);
NSLog(@"%@", self.parentViewController); //UINavigationController
NSLog(@"%@", vc.presentedViewController);
NSLog(@"%@", vc.presentingViewController); //UINavigationController
NSLog(@"%@", vc.parentViewController);
//////////////////////////// Demo1 //////////////////////////////
UIViewController *vc = [[MyController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
NSLog(@"%@", self.presentedViewController);
NSLog(@"%@", self.presentingViewController);
NSLog(@"%@", self.parentViewController); //UINavigationController
NSLog(@"%@", vc.presentedViewController);
NSLog(@"%@", vc.presentingViewController);
NSLog(@"%@", vc.parentViewController);//UINavigationController
可见,控制器之间的关系有两种:
1.parent & child (父子,如,控制器容器UINavigationController和它的子控制器的关系)
2.presented &presenting (被呈现者,呈现者,就是被弹出的控制器和弹出这个控制器的控制器之间的关系)
注意:
由示例所示:如果一个控制器被一个在另一个控制器容器中的控制器弹出的时候,那么它的presenting ViewController就是那个控制器容器,而不是直接弹出它的那个控制器,这么设计的原因也许是因为使层次结(architecture)构简单吧。