ios如何在一个控制器中添加另一个控制器

Posted 王彬iOS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios如何在一个控制器中添加另一个控制器相关的知识,希望对你有一定的参考价值。

最近的项目由于项目需要,涉及过多次在当前控制器上添加另一个控制器的View问题。这里做个笔记,为了方便,当前视图控制器记为控制器1,添加的视图记为控制器2
第一种情况:

1.首先,因为控制器2的视图上有需要与用户交互的需求,所以一定要设置2为1的子控制器

      ViewController *vc2 = [[ViewController alloc]init];
      [self addChildViewController:vc2];

    ps:当有多个子视图时还可能用到,子控制器的removeFromParentViewController方法

2.关于2的view的创建

  因为view的创建涉及到2的viewdidload方法,所以在控制器1的方法里面不要再重新创建vc2的view,不然创建的是另一个对象。在这里只需要根据需要设计vc2的view的frame就可以了。如下:

    vc2.view.frame = CGRectMake(0, 108, kScreenWidth, kScreenHeight-108);

 

 

第二种情况:
  • 我们创建一个ZYTestViewController : UITableViewController 
    然后我们稍微实现以下tableview的数据源方法

就先别搞那么复杂先,就这样完成了一个UITableViewController的创建

  • 接下来我们把这个控制器的view添加到我们的主控制中(UIViewController)

然后我们看一下,是否有我们想要的效果: 
技术分享图片 
我们是确实能将这个tableView添加上去了,但是出现了不能显示数据的问题。

  • 原因在于:我们的ZYTestViewController控制器死了,因为是一个局部变量,所以导致我们的数据不能显示。造成一个控制的view还在,但是这个view的控制器死了,这个非常危险的一件事情。
  • 所以我们就急迫的需要保住这个控制器,那么我们就需要对这个控制器进行强引用。

我们再看一下效果: 
技术分享图片 
只有这样才能显示我们的Cell的数据

所以得出一个结论:只要view在,view所在的控制器必须得在,这样才能保证view内部的数据和业务逻辑正常







以上是关于ios如何在一个控制器中添加另一个控制器的主要内容,如果未能解决你的问题,请参考以下文章

导航控制器 - 如何在 Xcode 中添加另一个视图控制器?

ios-如何在项目中添加导航控制器?

如何在iOS的静态库中添加xib文件

ios - 将目标添加到另一个视图控制器中的按钮

如何导航到另一个导航控制器iOS

从另一个片段的其他视图控制片段的视图