ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

(转)如何从storyBoard中加载其中一个controller

2019-06-25 20:56:13  阅读:245  来源: 互联网

标签:storyboard 实例 viewController 视图 controller storyBoard 创建 加载


在有storyboard之前,也就是iOS5之前,多视图之间的连接是通过创建新的xib文件,然后在代码中先alloc一个该类的实例,然后用

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

这个函数来将该实例和指定nibName的这个nib文件连接起来。

    这种老办法还要在父视图的类中定义一个子视图的类的变量,还要记得在dealloc和viewUnload中释放掉。

    新的storyboard特性,提倡在一个storyboard中组织多视图之间的关系。那么在storyboard中创建了一个新的controller,如何跟上一个视图连接上呢?

    第一个办法是采用视图之间的连线,也就是segue方法来连接。对于单个视图跳转单个视图,该方法适用。但是对于表视图的多行记录指向多个不同的子视图,本人暂时还不知道怎么操作。只能采用第二种办法了。

    第二个办法就是先在storyboard中拖出一个想创建的viewController,将身份检查器中的class指向指定的类。然后在属性检查器中,对该controller的identifier做一个指定。然后把这个controller做出你想要的各种效果后,保存。

      接下来,在点击某个控件就触发子视图的代码段中,添加如下代码:

 

  UIStoryboard *board = [UIStoryboard storyboardWithName: @"MainStoryboard" bundle: nil];

    childController = [board instantiateViewControllerWithIdentifier: @"DisclosureDetail"];

这两行的意思就是,先指定好是哪一个storyboard,然后在指定的这个storyboard中找出做了identifier标记的controller,再把这个controller实例化一下,赋给即将展现的子视图。

    然后通过

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

这样类似的展示函数,将childController采用各种效果展现出来。

    用storyboard来加载指定控制器,要注意以下几点:

   1,该控制器不需要事先alloc一个内存空间,最后也不需要在dealloc中释放。直接定义一个该控制器类的指针,指向实例化后的该控制器即可;

   2,不需要用if (childController == nil)这样的条件来判断。既然是创建指针,就每点一次触发控件,就调用一次board和instantiate就好。加载nib文件的老做法,是要加上这个if判断条件的,因为有alloc的操作。

    通过以上方法,就能把storyboard中创建的一个孤零零的viewController,跟上一级视图连接起来,从而改变老的做法--创建一个xib文件,再去找nibName来连接。

    如果该viewController承担了多个不同视图实例的类的话,就可以做到展示表视图中每一行的detail页面的功能。

转载于:https://www.cnblogs.com/pretty-guy/articles/4123277.html

标签:storyboard,实例,viewController,视图,controller,storyBoard,创建,加载
来源: https://blog.csdn.net/weixin_34161032/article/details/93651400

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有