Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UITableView tableFooterView not appearing

I have a UITableView to which I add a tableFooterView, for some reason the tableFooterView is not appearing?

How I add my tableFooterView

I add the tableFooterView in a connectionDidFinishLoading method after reloading the tableview data.

So what I do is

[controls reloadData];

UIView *myFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];
if(self.item.canRunOnDemand)
{
    UIButton *buttonRunWorkflow = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [buttonRunWorkflow addTarget:self action:@selector(runWorkflow:) forControlEvents:UIControlEventTouchDown];
    [buttonRunWorkflow setTitle:@"Run Now" forState:UIControlStateNormal];
    buttonRunWorkflow.frame = CGRectMake(15, 5, 290, 44); 
    buttonRunWorkflow.backgroundColor = [UIColor clearColor];
    [buttonRunWorkflow setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [myFooterView addSubview:buttonRunWorkflow];
}
if(item.canRunAlways)
{
    UILabel *canRunAlwaysLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 46, 100, 44)];
    canRunAlwaysLabel.backgroundColor = [UIColor clearColor];
    canRunAlwaysLabel.text = @"Run Always:";
    UISwitch *canRunAlways = [[UISwitch alloc] initWithFrame:CGRectMake(115, 56, 100, 44)];
    [canRunAlways addTarget:self action:@selector(canRunAlwaysChanged:) forControlEvents:UIControlEventValueChanged];
    [myFooterView addSubview:canRunAlways];
    [myFooterView addSubview:canRunAlwaysLabel];
    [canRunAlwaysLabel release];
    [canRunAlways release];
}

[myFooterView release];

[controls.tableFooterView addSubview:myFooterView];

Footer view height

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 100;
}

I have also tried this:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if(section == [[fields objectAtIndex:section] count] - 1)
    {
        return 100;
    }
    else {
        return 0;
    }
}
-(UIView*) tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    if(section == [[fields objectAtIndex:section] count] - 1)
    {
        UIView *myFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
        if(self.item.canRunOnDemand)
        {
            UIButton *buttonRunWorkflow = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            [buttonRunWorkflow addTarget:self action:@selector(runWorkflow:) forControlEvents:UIControlEventTouchDown];
            [buttonRunWorkflow setTitle:@"Run Now" forState:UIControlStateNormal];
            buttonRunWorkflow.frame = CGRectMake(15, 5, 290, 44); 
            buttonRunWorkflow.backgroundColor = [UIColor clearColor];
            [buttonRunWorkflow setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [myFooterView addSubview:buttonRunWorkflow];
        }
        if(item.canRunAlways)
        {
            UILabel *canRunAlwaysLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 46, 100, 44)];
            canRunAlwaysLabel.backgroundColor = [UIColor clearColor];
            canRunAlwaysLabel.text = @"Run Always:";
            UISwitch *canRunAlways = [[UISwitch alloc] initWithFrame:CGRectMake(115, 56, 100, 44)];
            [canRunAlways addTarget:self action:@selector(canRunAlwaysChanged:) forControlEvents:UIControlEventValueChanged];
            [myFooterView addSubview:canRunAlways];
            [myFooterView addSubview:canRunAlwaysLabel];
            [canRunAlwaysLabel release];
            [canRunAlways release];
        }
        return myFooterView;
    }
    else {
        return nil;
    }
}
like image 670
Armand Avatar asked Mar 16 '12 08:03

Armand


1 Answers

By looking at the header file of UITableView.h we see the declaration of property tableFooterView like this:

@property(nonatomic,retain) UIView *tableFooterView; // accessory view below content. default is nil. not to be confused with section footer

so the default property is nil. That's why you can't add another UIView to nil UIView. You should do something like this:

controls.tableFooterView = myFooterView;
like image 93
Adil Soomro Avatar answered Oct 08 '22 09:10

Adil Soomro