iOS 中 Storyboard 与 Xib 间控制器跳转 - 简化整理完整版
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
按以下四种情况分别说明,应该不缺啥了吧!
Xib.controller <=> Xib.controller
Storyboard.controller <=> Storyboard.controller
Storyboard.controller <=> Xib.controller
Xib.controller <=> Storyboard.controller
==========
补充:
Storyboard.controller <=> Storyboard.controller
还有一种特例,就是同一个 Storyboard 中的 controller 间跳转。
=========
再补充:
复用单元的构建,xib 中或 Storyboard 中。
===============================================================
终极简化两步:
一是获取到视图控制器实例,只有两种情况,xib 和 storyboard,代码直接构建不算手画界面部分不在讨论范畴:
A、从 xib :AaaViewController *aaaViewController = [[AaaViewController alloc] initWithNibName:@"AaaViewController" bundle:nil];
B、从 storyboard :假设 BbbViewController 视图控制器在 www.storyboard 中,并且其 storyboardid 为 BbbViewController
UIStoryboard *wwwSB = [UIStoryboard storyboardWithName:@"www" bundle:nil];
BbbViewController *bbbViewController = [wwwSB INSTANTIATEvIEWcONTROLLERwITHiDENTIFIER:@"BbbViewController"];
a、简化一:如果当前控制器和要压入的控制器在同一个 storyboard 的话,可以省略构建 UIStoryboard ,直接使用 self.storyboard 替代 wwwSB,
一个 storyboard 控制器被加载,其 storyboard 被默认保存为属性便于使用。
b、简化二:当 storyboard 中的视图控制器没有设置 storyboardid 时,而在该 storyboard 中的控制器间使用 segue 进行了关联,那么可以执行 segue 完成跳转,
当然 segue 也需要设置 identifier :
[self performSegueWithIdentifier:@"SegueToPersonCenter" sender:sender];
框架内部直接实例化了这个 identifier 对应的 segue 跳转到的视图控制器,那么就会有问题出现了,以往可以自已实例化,然后设置目标控制器的属性,现在怎么办?
看下面这个回调方法,在跳转前会被执行,给一个设置的机会:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
c、简化三:如果是刚开始为了快速构建控制器间的流转,也即草图阶段,不关心细节,那么可能连 segue 都不用,直接在按钮上往目标控制器上一拉选,点按钮就跳转了。
二是将此视图控制器压入导航控制器堆栈或模态呈现:
这个确实没什么可说的,与常规一样,也列一下吧:
[self.navigationController pushViewController:aaaViewController animated:YES];
[self presentViewController:bbbViewController animated:YES completion:^{}];
描述完成,基本没有遗漏了吧,关键的东西都在第一步中,视图控制器的实例化与设置上,
相对来讲,越简便的方法越受束缚,越麻烦的方法,给你的自由度越高,苹果在这方面面面俱到了。
可以所有的控制器在一个 storyboard 中,使用 segue 跳转