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

40 篇文章 0 订阅
  • 开发中,我们经常需要将一个控制器的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);
}

 }

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

  • 原因在于:我们的ZYTestViewController控制器死了,因为是一个局部变量,所以导致我们的数据不能显示。造成一个控制的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;

}

我们再看一下效果:
view的显示
只有这样才能显示我们的Cell的数据

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值