今天突然同事問(wèn)我曙咽,為啥他的tableview走了numberOfRowsInSection代理卻不走cellForRowAtIndexPath踱侣。這個(gè)問(wèn)題在我剛開(kāi)始寫(xiě)代碼的時(shí)候確實(shí)遇到過(guò)昌渤,當(dāng)時(shí)也找了很久气忠,才發(fā)現(xiàn)原來(lái)是我tableview的frame高度為0诫钓,懷疑蘋(píng)果在代理里面是加了判斷的。
現(xiàn)在總結(jié)一下蹄皱,可能出現(xiàn)這種情況的原因有三種:
第一種:tableview的代理沒(méi)設(shè)置
????????不用多說(shuō)览闰,要執(zhí)行代理,是必須設(shè)置delegate巷折,如果delegate沒(méi)設(shè)置压鉴,所有代理方法都不會(huì)走。
第二種:本視圖設(shè)置了代理盔几,但是在其他視圖有將代理設(shè)置給了別的對(duì)象晴弃。
? ? ? ? 這種情況也是會(huì)發(fā)生的掩幢,例如 aView 上添加了 tableview逊拍,然后 bView上添加了aView 如果此時(shí),在tableview設(shè)置代理給aView(tableview.delegate = aView)在bView中也設(shè)置了(bView.aView.tableView.delegate = bView)际邻,這樣 tableview的只會(huì)跑bView中的相關(guān)代理芯丧,而aView中的代理方法就無(wú)效了
第三種:tableview的frame有問(wèn)題
如文章開(kāi)頭說(shuō)的,當(dāng)我們將tableview的高度設(shè)置為0的時(shí)候世曾,就算有數(shù)據(jù)缨恒,也不會(huì)跑cellForRowAtIndexPat代理,而且這種情況比前兩種特殊轮听,這個(gè)是會(huì)走numberOfRowsInSection代理骗露,但不跑cellForRowAtIndexPath荸镊。
記錄一下平常遇見(jiàn)的問(wèn)題筐赔,也方便大家學(xué)習(xí),免得大家踩到坑里朗兵,好久才出來(lái)述寡。