经验之谈—控制器的view的显示
2015-12-14 09:00
232 查看
开发中,我们经常需要将一个控制器的view添加到另一个控制器的view上,这种效果是我们期望看到的,但是里边隐藏着一些细节,不注意的话,可能会达不到我们想到的效果。
先举个例子给大家看一下:
我们创建一个ZYTestViewController : UITableViewController
然后我们稍微实现以下tableview的数据源方法
就先别搞那么复杂先,就这样完成了一个UITableViewController的创建
接下来我们把这个控制器的view添加到我们的主控制中(UIViewController)
然后我们看一下,是否有我们想要的效果:
我们是确实能将这个tableView添加上去了,但是出现了不能显示数据的问题。
原因在于:我们的ZYTestViewController控制器死了,因为是一个局部变量,所以导致我们的数据不能显示。造成一个控制的view还在,但是这个view的控制器死了,这个非常危险的一件事情。
所以我们就急迫的需要保住这个控制器,那么我们就需要对这个控制器进行强引用。
我们再看一下效果:
只有这样才能显示我们的Cell的数据
所以得出一个结论:只要view在,view所在的控制器必须得在,这样才能保证view内部的数据和业务逻辑正常
先举个例子给大家看一下:
我们创建一个ZYTestViewController : UITableViewController
然后我们稍微实现以下tableview的数据源方法
[code]#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)
[code] - (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的控制器死了,这个非常危险的一件事情。
所以我们就急迫的需要保住这个控制器,那么我们就需要对这个控制器进行强引用。
[code]@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内部的数据和业务逻辑正常
相关文章推荐
- Zookeeper原理
- hibernate查询中文无结果或插入中文乱码解决方案
- MySQL执行外部sql脚本文件的命令
- Android studio使用
- in_addr_t转换成字符串
- 关于android官方提供的BluetoothChat源码连接不上蓝牙适配器的问题
- 代码切换到集成环境中(数据平台的原始配置)
- lightoj--1214--Large Division(大数取余)
- CPP-operator= overloding
- JS图片时间
- lightoj--1214--Large Division(大数取余)
- oracle 在一张日志表中,同一个ID 有多条记录,每个ID只获取最新时间的记录
- 10-《电子入门趣谈》第二章_电子电路的神经网络-2.1.1电阻
- 不黑诺基亚,他们觉得萌萌达
- js实现拖拽效果(构造函数)
- 开源 java CMS - FreeCMS2.4 建站向导
- 第十三周--数据结构-从一个顶点到其余各顶点的最短路径
- powerdesigner奇淫技
- 继承代码
- 继承