经验之谈—控制器的view的显示

  

  • 开发中,我们经常需要将一个控制器的view添加到另一个控制器的view上,这种效果是我们期望看到的,但是里边隐藏着一些细节,不注意的话,可能会达不到我们想到的效果。
  • 先举个例子给大家看一下:
  • 我们创建一个ZYTestViewController : UITableViewController
  • 然后我们稍微实现以下tableview的数据源方法

#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return 10;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *ID = @"cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

if (!cell) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

}

cell.textLabel.text = @"test";

return cell;

}

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

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

- (void)viewDidLoad

{

[super viewDidLoad];

- (void)viewDidLoad {

[super viewDidLoad];

ZYTestViewController *testVc = [[ZYTestViewController alloc]init];

[self.view addSubview:testVc.view];

testVc.view.frame = CGRectMake(100, 100, 200, 300);

}

}

然后我们看一下,是否有我们想要的效果:

我们是确实能将这个tableView添加上去了,但是出现了不能显示数据的问题。

  • 原因在于:我们的ZYTestViewController控制器死了,因为是一个局部变量,所以导致我们的数据不能显示。造成一个控制的view还在,但是这个view的控制器死了,这个非常危险的一件事情。
  • 所以我们就急迫的需要保住这个控制器,那么我们就需要对这个控制器进行强引用。( 在view里面添加了第二个控制器的view进来时,一定要强制引用,否则第二个控制器的view的动作事件无法点击)

@property(nonatomic,strong)ZYTestViewController *testView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

ZYTestViewController *testVc = [[ZYTestViewController alloc]init];

[self.view addSubview:testVc.view];

testVc.view.frame = CGRectMake(100, 100, 200, 300);

self.testView = testVc;

}

我们再看一下效果:

只有这样才能显示我们的Cell的数据

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

经验之谈—控制器的view的显示的更多相关文章

  1. iOS开发——UI进阶篇(十)导航控制器、微博详情页、控制器的View的生命周期

    一.导航控制器出栈 1.initWithRootViewController本质 UIViewController *vc = [[OneViewController alloc] init]; // ...

  2. ios 仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View.

    仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View. 实现原理,UINavigationController 的 self.view显示时把当前显示的vie ...

  3. 仅此一文让你明白ASP.NET MVC 之View的显示(仅此一文系列二)

    题外话 一周之前写的<仅此一文让你明白ASP.NET MVC原理>受到了广大学习ASP.NET MVC同学的欢迎,于是下定决心准备把它写成一个系列,以满足更多求知若渴的同学们.蒋金楠老师已 ...

  4. iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

    一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...

  5. iOS开发UI篇—控制器的View的创建

    iOS开发UI篇—控制器的View的创建 一.6种创建控制器View的方式 #import "NJAppDelegate.h" #import "NJViewContro ...

  6. 【转】 iOS开发UI篇—控制器的View的创建

    最近对view的周期等还不是非常清楚,就找到顶哥的文章,非常不错,就搬运过来了. 原文: http://www.cnblogs.com/wendingding/p/3770760.html 一.6种创 ...

  7. Swift - iOS中各种视图控制器(View Controller)的介绍

    在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来 ...

  8. IOS UI-控制器的创建和控制器的View的创建

    一.控制器的创建和控制器的View的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在 ...

  9. 仅此一文让你明白ASP.NET MVC 之View的显示

    有些人要问题,为什么我要学框架?这里我简单说一下,深入理解一个框架,给你带来最直接的好处: 使用框架时,遇到问题可以快速定位,并知道如何解决: 当框架中有些功能用着不爽时,你可以自由扩展,实现你想要的 ...

随机推荐

  1. [转]scp命令学习

    原博客地址http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html scp是secure copy的简写,用于在Linux下进行远程拷贝 ...

  2. 转载《学习HTML5 canvas遇到的问题》

    学习HTML5 canvas遇到的问题 1. 非零环绕原则(nonzZero rule) 非零环绕原则是canvas在进行填充的时候是否要进行填充的判断依据. 在判断填充的区域拉一条线出来,拉到图形的 ...

  3. jQuery登录倒计时

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  4. JSP初学者2

    <jsp:useBean id="name" class="classname" scope="page|request|session|app ...

  5. win7上装红米4手机驱动提示空间不足

    首先说:小米的垃圾支持.我在支持页面上看着 miuiV4或V5版本,再看我手机上9.5的版本.就感觉有些不妙. 下载下来后,点击安装程序,提示我安装空间不足......我F盘可用空间140G,不够你造 ...

  6. Ubuntu上使用vnc服务

    http://www.aichengxu.com/linux/8479752.htm 1. sudo apt-get install x11vnc 2. sudo x11vnc -storepassw ...

  7. eclipse 误删文件的恢复,代码的恢复

    误删除文件的恢复 在用eclipse进行代码编写操作时,有时会误删除文件或者文件包.通过eclipse的恢复文件功能可以恢复误删除的文件. 具体步骤为: 1.选择误删除文件在eclipse所在包(文件 ...

  8. String, StringBuffer and StringBuilder

    一 String 概述: String 被声明为 final,因此它不可被继承. 在 Java 8 中,String 内部使用 char 数组存储数据. public final class Stri ...

  9. redis 笔记(二)

    在上一篇中提到了数据类型 ,在本章中就具体说说这几种数据类型: sting :set /get / del / append /strlen 简单的对key-->value 写入读取删除增减 i ...

  10. shell中和RDA中的alert日志中文乱码

    客户端字符集无法识别中文,只能下载到本机使用nodepad++查看