Custom XIB in UITableView Section Header nutzen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Custom XIB in UITableView Section Header nutzen

    Ich lade eine separate XIB in den Header eines UITableView (Gruppiert). In der XIB liegt ein UIView und ein paar UILabel. Dies funktioniert auch ohne Probleme. Die Label werden angezeigt.

    Quellcode

    1. - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    2. {
    3. if (tableView == taskTableView) {
    4. ECTaskTableHeaderViewController* controller = [[ECTaskTableHeaderViewController alloc]
    5. initWithNibName:@"ECTaskTableHeaderView"
    6. bundle:[NSBundle mainBundle]];
    7. controller.titleLabel.text = [[taskArray objectAtIndex:section] valueForKey:@"title"];
    8. return controller.view;
    9. }


    Natürlich möchte ich auch zur Laufzeit Text in das UILabel schreiben. Leider hat dies keinerlei Auswirkungen. Das Label bleibt leer.
    Irgendwelche Ideen? Ich denke zum Zeitpunkt der Erzeugung der XIB/View ist das Label noch nicht instanziiert? Falls ja, wie kann man das umgehen?

    Danke! Gruss Kay.
  • Ok. Habs umgestellt.

    Quellcode

    1. ECTaskTableHeaderViewController* controller = [[[ECTaskTableHeaderViewController alloc] init] autorelease];
    2. NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"ECTaskTableHeaderView" owner:controller options:nil];
    3. NSLog(@"array %@",array);
    4. return [array objectAtIndex:0];


    Wie komme ich jetzt an das Label? Im Array steckt nur der View.

    Danke für die Hilfe...
  • Kay schrieb:

    Wie komme ich jetzt an das Label? Im Array steckt nur der View.

    Du gibst dem Label im Interface Builder ein Tag - also irgendeine Zahl, z. B. 42. Dann kommst Du so dran:

    Quellcode

    1. NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"ECTaskTableHeaderView" owner:controller options:nil];
    2. UIView *theView = [array objectAtIndex:0];
    3. UILabel *theLabel = (UILabel *)[theView viewWithTag:42];
    4. ...
    5. return theLabel;

    Den Controller kannst Du übrigens in die Tonne treten. ;)
    „Meine Komplikation hatte eine Komplikation.“