Ich möchte eine Tabellenüberschrift hinzufügen (keine Abschnittsüberschriften), wie zum Beispiel in der Kontakte-App:
genau so - ein Label neben einem Bild oberhalb der Tabelle.
Ich möchte, dass die gesamte Ansicht scrollbar ist, so dass ich diese nicht außerhalb der Tabelle platzieren kann.
Wie kann ich das tun?
UITableView" hat eine Eigenschaft "TableHeaderView". Setzen Sie diese auf die Ansicht, die Sie dort oben haben wollen.
Verwenden Sie eine neue "UIView" als Container, fügen Sie eine Textbeschriftung und eine Bildansicht zu dieser neuen "UIView" hinzu und setzen Sie dann "tableHeaderView" auf die neue Ansicht.
Zum Beispiel, in einem UITableViewController
:
-(void)viewDidLoad
{
// ...
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
[headerView addSubview:imageView];
UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
[headerView addSubview:labelView];
self.tableView.tableHeaderView = headerView;
[imageView release];
[labelView release];
[headerView release];
// ...
}
Im Interface Builder können Sie das ganz einfach tun. Erstellen Sie einfach eine Ansicht mit einer Tabelle und legen Sie eine weitere Ansicht auf die Tabelle. Dies wird dann die Ansicht für die Tabellenüberschrift. Fügen Sie Ihre Beschriftungen und Ihr Bild zu dieser Ansicht hinzu. Die Ansichtshierarchie sehen Sie in der Abbildung unten.
Sie können auch einfach NUR eine UIView im Interface Builder erstellen und per Drag & Drop die ImageView und das UILabel (damit es wie die gewünschte Überschrift aussieht) einfügen und diese dann verwenden.
Sobald Ihre UIView so aussieht, wie Sie es wünschen, können Sie sie programmatisch über die XIB initialisieren und zu Ihrer UITableView hinzufügen. Mit anderen Worten, Sie müssen nicht die GESAMTE Tabelle in IB entwerfen. Nur die HeaderView (auf diese Weise kann die HeaderView auch in anderen Tabellen wiederverwendet werden)
Ich habe zum Beispiel eine benutzerdefinierte UIView für einen meiner Tabellenköpfe. Der View wird durch eine xib-Datei mit dem Namen "CustomHeaderView" verwaltet und wird in den Tabellenkopf mit dem folgenden Code in meiner UITableViewController-Unterklasse geladen:
-(UIView *) customHeaderView {
if (!customHeaderView) {
[[NSBundle mainBundle] loadNibNamed:@"CustomHeaderView" owner:self options:nil];
}
return customHeaderView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Set the CustomerHeaderView as the tables header view
self.tableView.tableHeaderView = self.customHeaderView;
}