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内部的数据和业务逻辑正常

时间: 2024-11-10 04:56:54

ios如何在一个控制器中添加另一个控制器的相关文章

c#中在一个窗体中触发另一个窗体的事件

c#中在一个窗体中触发另一个窗体的事件 创建两个窗体,分别为form1,form2,在form1中添加控件textBox1和button1,创建一个form2的对象Form2 b = null; 在form2中添加button1,定义委托和事件 //定义委托 public delegate void MyDelegate(); //定义事件 public event MyDelegate MyEvent; 给form2中的button1添加消息相应函数并做修改 private void butt

VS在一个解决方案中添加多个项目(工程)

VS2015在一个解决方案中添加多个项目(工程) 首先要肯定的一点是,在一个解决方案(solution)中是可以添加多个项目(project)的,这多个项目之间存在两种关系:       1.项目间彼此独立,各自有各自的入口,只是组织在一个解决方案中便于管理:       2.项目间存在相互调用,只存在一个入口. 在这里只讨论第一种关系: 项目间彼此独立,每个项目都有自己的入口,则同一时间解决方案只能有一个活动入口,相当于只有一个项目存在, 通过设置可以选择哪个项目作为活动项目,则之后的编译.运

AJAX 怎样在一个UpDatePanel中刷新另一个updatePanel

原文:AJAX 怎样在一个UpDatePanel中刷新另一个updatePanel 在页面上(.aspx)<asp:UpdatePanel ID="MyID1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional"><ContentTemplate>          //html内容</ContentTemplate

Android 在一个程序中启动另一个程序

Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用. 一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: Intent intent = new Intent(Intent.ACTION_MAIN); intent.add

往一个控制器的View添加另一个控制器的View出现的异常

往一个控制的view上添加另一个控制器的View,(由于layout缘故)可能视图会发生异常,出现伸缩(被添加视图的view变小,或者变大),所以应该设置被添加控制器的View的属性,让他不随父控件的变化而变化, 被添加控制器.view.autoresizingMask = UIViewAutoresizingNone; 往一个控制器的View添加另一个控制器的View出现的异常,布布扣,bubuko.com

Android开发中在一个Activity中关闭另一个Activity

Android开发中在一个Activity中关闭另一个Activity 比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA 解决方案: 1. 在 ActivityA 里面设置一个静态的变量instance,初始化为this在 ActivityB 里面, ActivityA.instance.finish(); 2. 也可以通过ActivityManager ActivityManager manager = (ActivityManager)getSys

在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体

在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体ShowAllPage sAllPage = new ShowAllPage();          //  sAllPage.FormBorderStyle = FormBorderStyle.None;           // sAllPage.Dock = DockStyle.Fill;            sAllPage.TopLevel = false;            this.MainPanel.Controls.

c#在一个窗体的panel中添加另一个窗体

以下步骤实现将Form2放置在Form1中Panel中显示: (1)在Visual Studio中新建一个“Windows 窗体应用程序”项目 (2)在项目中添加窗体Form2,为演示效果,窗体的背景设置为Gray (3)在Form1上布置一个Panel控件 (4)Form1的窗体代码Form1.cs using System;using System.Windows.Forms; namespace WindowsFormsApplication1{    public partial cla

iOS在一个分类中添加属性

有时候,我们会想在别人的类中添加一个属性.这个属性只会在自己的模块用到,在其它地方无用.那么现在就用两个方案: 1,直接在原类中添加一个属性 2,写一个分类,在分类中将这个属性加进去. 这两种方案实现的异同: 同:都能达到在已有的类中添加一个属性的需求. 异: 第一种方案优点:实现简单.缺点:破坏了已有的类的封装,会给后续开发者带来疑惑.结论:笨方法 第二种方案有点:能与已有类完全分开,保持了模块化的独立性.貌似没有缺点,如果一定要找出一个缺点,那就是一个字"难",因为要用到个高大上的