在沒有數(shù)據(jù)數(shù)組(數(shù)據(jù)源)的情況下,deleteRows然后insertRows這個會崩潰。
然后換了第二種辦法,把所有需要的控件都添加在cell中,在cell中增加一個對外的成員變量接口(flag),在方法內(nèi)部實(shí)現(xiàn)setFlag:方法,來設(shè)置對應(yīng)的控件隱藏或顯示。也是沒有反應(yīng)。比如非登錄狀態(tài)我想只顯示控件1和2,登錄狀態(tài)我想只顯示控件3和4.
if(flag) {
//登錄,顯示3、4,隱藏1、2
self.control3.hidden =NO;
self.control4.hidden=NO;
self.control1.hidden = YES;
self.control2.hidden=YES;
}else{
//非登錄,顯示1、2,隱藏3、4
self.control3.hidden =YES;
self.control4.hidden=YES;
self.control1.hidden=NO;
self.control2.hidden=NO;
}
然后在設(shè)置完這些后,我各個地方調(diào)用了
[self layoutSubviews];
[self layoutIfNeeded];
[self.tableView reloadData];
[self.tableViewreloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
都沒有反應(yīng)。
考慮了一下[self.tableView reloadData];這個方法,是根據(jù)數(shù)據(jù)源,重新刷新cell上的數(shù)據(jù)。我可不可以在Controller里定義一個成員變量,記錄登錄狀態(tài)。自定義兩種cell,分別按照登錄狀態(tài)和非登錄狀態(tài)布局,然后在cellForRowAtIndexPath這個方法里判斷,如果登錄狀態(tài),返回登錄狀態(tài)的cell,如果非登錄狀態(tài),返回非登錄狀態(tài)的cell,每次刷新的tableView的時候自己判斷取哪個cell。這樣,在登錄成功要改變布局的方法里,改變登錄狀態(tài)這個成員變量,然后[self.tableView reloadData];他就會重新走cellForRowAtIndexPath,然后重新根據(jù)登錄狀態(tài)加載cell。經(jīng)過驗(yàn)證,這個方法上行得通的。代碼就不貼啦。多思考。看不懂的可以一起討論。有錯誤歡迎指出。