UITableView登录状态和非登录状态cell显示不同的布局

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

你可能感兴趣的:(UITableView登录状态和非登录状态cell显示不同的布局)