在沒有數據數組(數據源)的情況下,deleteRows然后insertRows這個會崩潰。
然后換了第二種辦法,把所有需要的控件都添加在cell中,在cell中增加一個對外的成員變量接口(flag),在方法內部實現setFlag:方法,來設置對應的控件隱藏或顯示。也是沒有反應。比如非登錄狀態我想只顯示控件1和2,登錄狀態我想只顯示控件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;
}
然后在設置完這些后,我各個地方調用了
[self layoutSubviews];
[self layoutIfNeeded];
[self.tableView reloadData];
[self.tableViewreloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
都沒有反應。
考慮了一下[self.tableView reloadData];這個方法,是根據數據源,重新刷新cell上的數據。我可不可以在Controller里定義一個成員變量,記錄登錄狀態。自定義兩種cell,分別按照登錄狀態和非登錄狀態布局,然后在cellForRowAtIndexPath這個方法里判斷,如果登錄狀態,返回登錄狀態的cell,如果非登錄狀態,返回非登錄狀態的cell,每次刷新的tableView的時候自己判斷取哪個cell。這樣,在登錄成功要改變布局的方法里,改變登錄狀態這個成員變量,然后[self.tableView reloadData];他就會重新走cellForRowAtIndexPath,然后重新根據登錄狀態加載cell。經過驗證,這個方法上行得通的。代碼就不貼啦。多思考??床欢目梢砸黄鹩懻摗S绣e誤歡迎指出。