TableView不走cellForRowAtIndexPath代理方法

今天突然同事问我,为啥他的tableview走了numberOfRowsInSection代理却不走cellForRowAtIndexPath。这个问题在我刚开始写代码的时候确实遇到过,当时也找了很久,才发现原来是我tableview的frame高度为0,怀疑苹果在代理里面是加了判断的。

现在总结一下,可能出现这种情况的原因有三种:

第一种:tableview的代理没设置

        不用多说,要执行代理,是必须设置delegate,如果delegate没设置,所有代理方法都不会走。

第二种:本视图设置了代理,但是在其他视图有将代理设置给了别的对象。

        这种情况也是会发生的,例如 aView 上添加了 tableview,然后 bView上添加了aView 如果此时,在tableview设置代理给aView(tableview.delegate = aView)在bView中也设置了(bView.aView.tableView.delegate = bView),这样 tableview的只会跑bView中的相关代理,而aView中的代理方法就无效了

第三种:tableview的frame有问题

如文章开头说的,当我们将tableview的高度设置为0的时候,就算有数据,也不会跑cellForRowAtIndexPat代理,而且这种情况比前两种特殊,这个是会走numberOfRowsInSection代理,但不跑cellForRowAtIndexPath。

记录一下平常遇见的问题,也方便大家学习,免得大家踩到坑里,好久才出来。

你可能感兴趣的:(iOS,ios,tableview,delegate)