tableview:cellForRowAtIndexPath:不执行的原因

遇到一个比较奇葩的问题,调用tableview的reloadData方法时,numberOfSectionsInTableView和tableview:numberOfRowsInSection:都正常执行,可是tableview:cellForRowAtIndexPath:却不执行。       我所要实现的效果是在vc1上添加vc2的view,vc2的view上有子视图tableview,
摘要由CSDN通过智能技术生成

       遇到一个比较奇葩的问题,调用tableview的reloadData方法时,numberOfSectionsInTableView和tableview:numberOfRowsInSection:都正常执行,可是tableview:cellForRowAtIndexPath:却不执行。

       我所要实现的效果是在vc1上添加vc2的view,vc2的view上有子视图tableview,tableview的delegate和datasource设置为vc2。也就是说tableview:cellForRowAtIndexPath:是在vc2中实现的。刚开始我以为是因为没有在主线程中调用reloadData方法造成的,因为tableview:cellForRowAtIndexPath:是在tableview显示的时候(UI 刷新)调用,而 UI 刷新是在主线程中执行的。BUT,把reloadData放入主线程后,无卵用。。

       经过排查,发现我的方法调用顺序是这样的:viewDidLoad -> setupView -> reloadData,也就是说,我在viewWillAppear之前(视图还未显示)调用了reloadData方法。viewDidLoad是视图加载完成后调用,此时视图还未开始显示。而tableview:cellForRowAtIndexPath:是在具体的cell显示时执行,绘制cell。我把reloadData放在viewDidLoad中才造成了这个问题。

       那么现在有两种解决方法:

       第一种:把reloadData放在vc2的viewWillAppear中。

       第二种:将vc2写成NSObject的子类,它有一个属性view,将这个view添加到vc1.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值