前面的程序都是一个MVC,多个View时,怎么办,那就需要多个Controller。一个MVC只能控制一屏幕或更小的区域。
那如何切换两个MVC呢,用控制器群里的控制器:UINavigationController。
也是继承于UIVIewController。UINavigationController的长相如下图:
中间有个title。
它是个特殊的controller,因为它有一个Outlet只向一另外一个MVC,就是它的rootViewController。
rootViewController就是出现在白色区域的。原来的rootViewController放到UINavigationController后,它 的bounds高度会变小一些。
通过执行一个segues,可以跳转到另外一个MVC上。就是把新的MVC push都屏幕上,点返回,把当前的MVC pop出来。
segues有三种方式:
push
model
custom
选中你要嵌入的view Controllser,然后通过Editor的 Embed in包含进来一个Navigation Controller。
这个箭头表示程序的开始。
- (void)popViewControllerAnimated:(BOOL)animated;
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@“DoAParticularThing”]) { UIViewController *newController = segue.destinationViewController; } }
- (void)performSegueWithIdentifier:(NSString *)segueId sender:(id)sender;例子:
- (IBAction)rentEquipment { if (self.snowTraversingTalent == Skiing) { [self performSegueWithIdentifier:@“AskAboutSkis” sender:self]; } else { [self performSegueWithIdentifier:@“AskAboutSnowboard” sender:self]; } }
NSString *vcid = @“something”; UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:vcid];
self.storyboard是一个ViewController的属性。
- (IBAction)doit { DoitViewController *doit = [self.storyboard instantiateViewControllerWithIdentifier:@”doit1”]; doit.infoDoitNeeds = self.info; [self.navigationController pushViewController:doit animated:YES]; }获取后,把它push到navigationController展示。
Demo源码下载地址:http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall
容芳志 (http://blog.csdn.net/totogo2010)
本文遵循“署名-非商业用途-保持一致”创作公用协议