wake-up-neo.com

Wie füge ich eine Fußzeile zur UITableView hinzu?

Ich verwende diesen Code, um der TableView eine Fußzeile hinzuzufügen. Es hat 20 Abschnitte und jeder Abschnitt einige Zeilen. Es gibt die Methoden titleForHeaderInSection und sectionForSectionIndexTitle.

CGRect footerRect = CGRectMake(0, 0, 320, 40);
UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";
self.theTable.tableFooterView = tableFooter;
[tableFooter release];

Was mache ich falsch?

vielen Dank,

RL

52
Rui Lopes

Sie müssen die UITableViewDelegate-Methode implementieren

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

und geben Sie die gewünschte Ansicht (z. B. ein UILabel mit dem gewünschten Text in der Fußzeile) für den entsprechenden Tabellenabschnitt zurück.

35
Erik

Ich sehe das speziell in meinem Code 

self.theTable.tableFooterView = tableFooter;

arbeitet und 

[self.theTable.tableFooterView addSubview:tableFooter];

funktioniert nicht. Also bleib beim ersten und schaue woanders nach dem möglichen Fehler. HTH

35
kris

Ich habe das benutzt und es hat perfekt funktioniert :)

    UIView* footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];
    [footerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"ProductCellBackground.png"]]];
    self.tableView.tableFooterView = footerView;
    [self.tableView setSeparatorStyle:(UITableViewCellSeparatorStyleNone)];
    [self.tableView setContentInset:(UIEdgeInsetsMake(0, 0, -500, 0))];
18
pawelini1

Anfangs habe ich nur die Methode ausprobiert:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

aber nach Gebrauch zusammen mit:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

problem wurde gelöst. Beispielprogramm-

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

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *sampleView = [[UIView alloc] init];
    sampleView.frame = CGRectMake(SCREEN_WIDTH/2, 5, 60, 4);
    sampleView.backgroundColor = [UIColor blackColor];
    return sampleView;
}

und enthalten das UITableViewDelegate-Protokoll.

@interface TestViewController : UIViewController <UITableViewDelegate>
6
Subham93

Ich weiß, dass dies eine ziemlich alte Frage ist, aber ich habe gerade dieselbe Ausgabe getroffen. Ich weiß nicht genau warum, aber es scheint, dass tableFooterView nur eine Instanz von UIView sein kann (nicht "irgendwie", sondern "ist Mitglied"). Also habe ich in meinem Fall ein neues UIView-Objekt erstellt (zum Beispiel wrapperView). und fügen Sie meine benutzerdefinierte Unteransicht hinzu ...

CGRect footerRect = CGRectMake(0, 0, 320, 40);
UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";
self.theTable.tableFooterView = tableFooter;
[tableFooter release];

zu:

CGRect footerRect = CGRectMake(0, 0, 320, 40);
UIView *wrapperView = [[UIView alloc] initWithFrame:footerRect];

UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";

[wrapperView addSubview:tableFooter];

self.theTable.tableFooterView = wrapperView;
[wrapperView release];
[tableFooter release];

Ich hoffe es hilft. Für mich geht das.

6
zioolek

Swift 2.1.1 unten funktioniert:

func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        let v = UIView()
        v.backgroundColor = UIColor.RGB(53, 60, 62)
        return v
    }

    func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 80
    }

Bei Verwendung von self.theTable.tableFooterView = tableFooter gibt es ein Leerzeichen zwischen letzter Zeile und tableFooterView.

4
William Hu

Diese Beispiele funktionieren gut. Sie können den Abschnitt überprüfen und dann eine Höhe zurückgeben, um den Abschnitt anzuzeigen oder auszublenden. Vergessen Sie nicht, Ihren Viewcontroller um UITableViewDelegate zu erweitern.

Ziel c

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (section == 0)
    {
        // to hide footer for section 0 
        return 0.0;
    }
    else
    {
        // show footer for every section except section 0 
        return HEIGHT_YOU_WANT;
    }
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *footerView = [[UIView alloc] init];
    footerView.backgroundColor = [UIColor blackColor];
    return footerView;
}

Swift

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let footerView = UIView()
    footerView.backgroundColor = UIColor.black
    return footerView
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    if section == 0 {
        // to hide footer for section 0
        return 0.0
    } else {
        // show footer for every section except section 0
        return HEIGHT_YOU_WANT
    }
}
3
abdullahselek
[self.tableView setTableFooterView:footerView];
2
user3693546

Ich hatte das gleiche Problem, ersetzte jedoch die folgende Zeile in meinem Header:

@interface MyController : UIViewTableViewController <UITableViewDelegate, UITableViewDataSource>

mit dieser Zeile und es funktioniert wie erwartet:

@interface RequestViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

Beachten Sie den UIViewController . Viel Glück :)

1
PowerAktar

anstatt 

self.theTable.tableFooterView = tableFooter;

versuchen 

[self.theTable.tableFooterView addSubview:tableFooter];
1
amattn

Wenn Sie den Sticky Bottom-Effekt nicht bevorzugen, würde ich ihn in viewDidLoad()https://stackoverflow.com/a/38176479/4127670 einfügen.

0
spaceMonkey