今天突然同事問我,為啥他的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。
記錄一下平常遇見的問題,也方便大家學習,免得大家踩到坑里,好久才出來。