在没有数据数组(数据源)的情况下,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。经过验证,这个方法上行得通的。代码就不贴啦。多思考。看不懂的可以一起讨论。有错误欢迎指出。
网友评论