iOS 中 Storyboard 与 Xib 间控制器跳转 - 简化整理完整版-阿里云开发者社区

开发者社区> 开发与运维> 正文

iOS 中 Storyboard 与 Xib 间控制器跳转 - 简化整理完整版

简介: iOS 中 Storyboard 与 Xib 间控制器跳转 - 简化整理完整版 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

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 {


     }

     这里的 sender 这里的 sender 就是上面的传入参数 sender,也可以在控制器的别名分类中设置私有属性暂存参数,然后在此回调中使用。

    c、简化三:如果是刚开始为了快速构建控制器间的流转,也即草图阶段,不关心细节,那么可能连 segue 都不用,直接在按钮上往目标控制器上一拉选,点按钮就跳转了。


二是将此视图控制器压入导航控制器堆栈或模态呈现

      这个确实没什么可说的,与常规一样,也列一下吧:

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

      [self presentViewController:bbbViewController animated:YES completion:^{}];


描述完成,基本没有遗漏了吧,关键的东西都在第一步中,视图控制器的实例化与设置上,

相对来讲,越简便的方法越受束缚,越麻烦的方法,给你的自由度越高,苹果在这方面面面俱到了。

可以所有的控制器在一个 storyboard 中,使用 segue 跳转


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章