2010-07-20 16 views
19

OK, ich weiß, dass dies zuvor gefragt wurde, also bitte verzeihen Sie mir für die Frage erneut. Es scheint nur so, als müsste es einen einfacheren Weg dafür geben.Ändern der Farbe von UITableView Abschnitt Kopfzeilen

Gibt es eine "einfache" Möglichkeit, die Hintergrundfarbe des UITableView-Abschnitts zu ändern? Ich weiß, dass ich die Delegate-Methode 'viewForHeaderInSection' verwenden kann, um UITableView eine benutzerdefinierte UIView zu übergeben, die für die Abschnittsüberschriften verwendet wird, aber alles, was ich wirklich tun möchte, ist 'tintColor'. Es gibt eine TintColor-Eigenschaft in der Suchleiste, warum nicht für die Abschnittsüberschriften.

Wenn ich ViewForHeaderInSection verwende, um meine eigene benutzerdefinierte UIView zu erstellen, muss ich auch ein eigenes Label erstellen. Ich muss mein Label so gestalten und positionieren, dass es genau wie der Rest des Apple-Standards aussieht. Ich muss den "Hintergrund" stylen und auslegen, um wie der Rest des Apple-Standards auszusehen.

Ich kann keinen Weg finden, einfach nach der Überschrift des Abschnitts zu fragen und dann seine Farbe zu ändern. Fehle ich etwas oder muss ich das wirklich auf die harte Tour machen?

Wenn ich das auf die harte Tour machen muss, hat jemand alle Styling-Informationen, die dem Apple-Standard entsprechen? - bar ist ‚durchscheinend‘ - Bar hat einige Schattierungen auf der oberen und der unteren - Etikett hat eine bestimmte Größe, Position, Schraffuren, etc

Dank. Und noch einmal, tut mir Leid, dass ich diese Frage erneut gestellt habe.

Antwort

12

Dies ist etwas, das ich eine ganze Weile damit verbracht habe, mit mir selbst zu kämpfen, nur um festzustellen, dass es keine Möglichkeit gibt, nur die TintColor des Abschnittsheaders zu ändern. Die Lösung, die mir dabei einfiel, war, den Hintergrund des Abschnittsheaders zu scannen, den Farbton in Photoshop zu ändern und ihn dann als Hintergrund für den Abschnittskopf zu verwenden. Dann ist es nur ein Fall, das Etikett auszulegen.

Wie Sie gesagt haben, ist die zu verwendende delegate-Methode viewForHeaderInSection.

Hier ist, was ich gefunden habe funktioniert und sieht aus wie das Apple-Standard:

UIView *customView = [[[UIView alloc] initWithFrame:CGRectMake(10.0, 0.0, 320.0, 22.0)] autorelease]; 
customView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"headerbackground.png"]];; 

UILabel *headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; 
headerLabel.backgroundColor = [UIColor clearColor]; 
headerLabel.opaque = NO; 
headerLabel.textColor = [UIColor whiteColor]; 
headerLabel.font = [UIFont boldSystemFontOfSize:18]; 
headerLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); 
headerLabel.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]; 
headerLabel.frame = CGRectMake(11,-11, 320.0, 44.0); 
headerLabel.textAlignment = UITextAlignmentLeft; 
headerLabel.text = @"Header Label"; 
[customView addSubview:headerLabel]; 
return customView; 

Here "headerbackground.png" ist ein 1-Pixel um 22 Pixel (das Doppelte für iPhone 4) Bild, das erhalten über die Länge des Headers wiederholt.

Hoffe, das hilft!

+0

Warum doppelt so für iPhone 4? Können Sie bitte eine Referenz für diese Info geben .. – Anand

+1

Weil das iPhone 4 die doppelte Auflösung hat? In diesem Beispiel wäre "headerbackground.png" 1x22, und ich hätte auch ein anderes Bild namens "[email protected]", das auf dem iPhone 4 (und jetzt dem neuen iPod touch) verwendet werden würde. Weitere Informationen finden Sie hier: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/SupportResolutionIndependence/SupportingResolutionIndependence.html – neilkimmett

+0

Meine eigenen Screenshots zeigen, dass die richtige linke Einfügung für den Text ist 12 Pixel, nicht 10. Wie folgt: CGFloat leftInset = 12.0f; UILabel * Label = [[UILabel-Zuweisung] initWithFrame: CGRectMake (leftInset, 0, tableSize.width - leftInset, headerImg.size.height)]; – MoDJ

29

Mit der neueren UIAppearance Weise, Dinge zu tun, in Versionen> iOS 6.0 können Sie einfach tun, zum Beispiel:

[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]]; 
+1

wo muss ich das hinstellen? – Ulaga

+0

Scheint keinen Effekt in iOS zu haben 10 – elsurudo

19

Mit UIAppearance können Sie UILabel Textfarbe auf UITableView Header wie folgt ändern:

[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setTextColor:[UIColor whiteColor]]; 
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setShadowColor:[UIColor whiteColor]]; 

Sollte unter iOS 6.0+ funktionieren. Kann überall angerufen werden (viewDidLoad usw.).

+1

[UITableViewHeaderFooterView Klasse] sollte Nil bis iOS 6.0 zurückgeben, so sollte diese Methode nicht funktionieren bis 6.0 – Speakus

+0

Danke, korrigierte ich meine Antwort. – user882209

7

Wenn Sie das Aussehen ändern, wie in den anderen Antworten, ist es anwendungsweit. Wenn Sie nur für einen bestimmten Tableview ändern möchten, implementieren:

-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { 
    UITableViewHeaderFooterView * headerview = (UITableViewHeaderFooterView *)view; 
    headerview.contentView.backgroundColor = [UIColor greenColor]; 
    headerview.textLabel.textColor = [UIColor whiteColor]; 
} 
2

Die UIAppearance Methode appearanceWhenContainedIn wie von iOS 9 ist veraltet.0; Stattdessen können Sie mit der Methode "appearanceWhenContainedInInstancesOfClasses" und einem Array dasselbe tun.

[UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]].textColor = [UIColor darkTextColor]; 
Verwandte Themen