如何隐藏UITableview页脚视图?

时间:2014-06-24 05:28:56

标签: ios uitableview

我要求显示消息为"没有通知"当数组为空但一旦数组有数据然后删除页脚视图并在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之前。有人建议我解决方案, 谢谢你。

5 个答案:

答案 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;

}