今天突然同事问我,为啥他的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。
记录一下平常遇见的问题,也方便大家学习,免得大家踩到坑里,好久才出来。
网友评论