经验之谈—控制器的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内部的数据和业务逻辑正常

最新文章

  1. WinForm开发-界面控件到实体,实体到界面控件自动绑定
  2. linux chromuim安装常用插件(flash,手势,拖拽,广告屏蔽)
  3. paper 29 :CV会议+领先研究室+专家+代码网址
  4. LeetCode----Unique Binary Search Trees 2
  5. mssql 置疑的处理
  6. 善于 调用Windows API
  7. 【算法专题】工欲善其事必先利其器—— C++ STL中vector(向量/不定长数组)的常用方法总结
  8. ubuntu14.04 64位 安装eclipse出错
  9. 3分钟学会如何调度运营海量Redis系统
  10. MEF 基础简介 一
  11. 【MySQL】sort by then group by
  12. 【Python】Part1 应用1-Netcat
  13. Git命令面试集
  14. 进程命令ps/top/kill
  15. elasticsearch在CentOS环境下开机启动
  16. 学习docker后的个人理解
  17. HTML标签 select 里 动态添加option
  18. jQuery与DOM对象的转换
  19. url传多值问题
  20. shell数组中“和@的妙用

热门文章

  1. C# 如何提取SaveFileDialog的保存路径?
  2. js.css嵌入dll
  3. jquery——write less,do more
  4. [LeetCode]23. Merge k Sorted Lists合并K个排序链表
  5. js之方法
  6. 使用Gulp压缩IMG
  7. iDempiere 使用指南 库存出入库研究
  8. Android Proguard.flags LOCAL_PROGUARD_FLAGS
  9. Oracle:environment variable "PATH" does not exceed the recommended length
  10. Exchange 2016的MAPI over HTTP简介