我要求显示消息为"没有通知"当数组为空但一旦数组有数据然后删除页脚视图并在tableview中显示数据。我按照下面的方法。
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection: (NSInteger)section
{
if(self.notificationDataArray.count == 0){
self.tableView.tableFooterView.hidden = NO;
return 50;
} else {
return 0;
}
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
if(self.notificationDataArray.count == 0){
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 0, self.view.frame.size.width, [self tableView:tableView heightForFooterInSection:section]);
UILabel *textLabel = [[UILabel alloc]initWithFrame:view.frame];
[view addSubview:textLabel];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.textColor = [UIColor blueTextColor];
textLabel.font = [UIFont boldSystemFontOfSize:16.0];
textLabel.text = @"No Notification";
return view;
} else {
return nil;
}
}
但是最初在API调用之前,数组将为空,因此页脚视图会显示几秒钟然后消失。如何最初隐藏页脚视图,我的意思是在加载tableview之前。有人建议我解决方案, 谢谢你。
答案 0 :(得分:2)
on View确实在Api调用之前加载了你这样做。
yourTableView.sectionFooterHeight = 0;
[[yourTableView tableFooterView] setHidden:YES];
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
if ([yourArray count]==0) {
return nil;
}
return yourCustomView;
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
if ([yourArray count]==0) {
return 0;
}
return yourCustomViewHeight;
}
然后在收到回复后,您可以显示页脚视图,根据需要更改值
答案 1 :(得分:1)
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 0, self.view.frame.size.width, [self tableView:tableView heightForFooterInSection:section]);
if(self.notificationDataArray.count == 0)
{
UILabel *textLabel = [[UILabel alloc]initWithFrame:view.frame];
[view addSubview:textLabel];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.textColor = [UIColor blueTextColor];
textLabel.font = [UIFont boldSystemFontOfSize:16.0];
textLabel.text = @"No Notification";
}
else
{
view.backgroundColor=[UIColor clearColor];
}
return view;
}
预计这个你也可以在数组计数为零时隐藏tableview,你也可以在viewdidLoad方法中隐藏页脚。
答案 2 :(得分:1)
为什么不使用BOOL实例变量来指示数据加载。
BOOL dataLoaded;
最初在viewDidLoad
中将其设置为NO
。加载数据后,您可以将其设为YES。
dataLoaded = YES
现在检查条件是
if(self.notificationDataArray.count == 0 && dataLoaded){
// Do your stuff
}
答案 3 :(得分:0)
不要返回nil而是初始化一个0帧的空白视图并返回
if(self.notificationDataArray.count == 0){
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 0, self.view.frame.size.width, [self tableView:tableView heightForFooterInSection:section]);
UILabel *textLabel = [[UILabel alloc]initWithFrame:view.frame];
[view addSubview:textLabel];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.textColor = [UIColor blueTextColor];
textLabel.font = [UIFont boldSystemFontOfSize:16.0];
textLabel.text = @"No Notification";
return view;
} else {
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 0, 0, 0);
return view ;
}
答案 4 :(得分:0)
我只是在titleForFooterInSection中设置了文本。如果项目计数为0,则为空。 当表加载时,文本不会显示。
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
NSString *mensaje = @"";
NSInteger numberOfRowsInSection = [self tableView:self.tableView numberOfRowsInSection:section ];
if (numberOfRowsInSection == 0) {
mensaje = @"No notifications";
}
return mensaje;
}