Frage

Ich mag den Hintergrund (und vielleicht auch die Grenze zu) von allen des UITableViewCells in meinem UITableView anpassen. Bisher habe ich nicht in der Lage gewesen, dieses Zeug zu gestalten, so dass ich habe eine Reihe von weißen Hintergrund Zellen, welche ist die Standardeinstellung.

Gibt es eine Möglichkeit, dies mit dem iPhone SDK zu tun?

War es hilfreich?

Lösung

Sie müssen die Backgroundcolor von der Zelle zu Ihrer Farbe content einzustellen. Wenn Sie Zubehör (wie zB Offenlegung Pfeile usw.) verwenden, werden sie als weiße auftauchen, so können Sie benutzerdefinierte Versionen dieser rollen müssen.

Andere Tipps

Dies ist der effizienteste Weg, ich über gekommen sind, dieses Problem zu lösen, verwenden Sie die willDisplayCell Delegatmethode (dies kümmert sich um die weiße Farbe für den Hintergrund Text-Label als auch bei cell.textLabel.text und / oder Zelle. detailTextLabel.text):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { ... }

Wenn diese Delegatmethode die Farbe der Zelle genannt wird, wird über die Zelle anstatt der Tabellenansicht gesteuert, wie wenn Sie:

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { ... }

So innerhalb der Körper der Zelle Delegatmethode den folgenden Code in den abwechselnden Farben von Zellen hinzufügen oder einfach nur den Funktionsaufruf verwenden, um alle Zellen der Tabelle zu machen die gleiche Farbe.

if (indexPath.row % 2)
{
    [cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
}
else [cell setBackgroundColor:[UIColor clearColor]];

Diese Lösung funktionierte gut in meinem Umstand ...

Das ist wirklich einfach, da O 3.0 nur die Hintergrundfarbe der Zelle in dem willDisplayCell Verfahren eingestellt. Sie müssen nicht die Farbe in der cellForRowAtIndexPath gesetzt.

Dies funktioniert sowohl für die Ebene und gruppiert Stil:

Code:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor redColor];
}

P. S: Hier wird die Dokumentation Extrakt für willDisplayCell:

  

"Eine Tabellenansicht sendet diese Meldung an   seine Delegierten, kurz bevor es Zelle verwendet   zu ziehen, um die eine Zeile, wodurch   delegieren die Zelle Objekt anzupassen   bevor es angezeigt wird. Diese Methode   gibt dem Delegierten eine Chance   außer Kraft setzen zustandsbasierten Eigenschaften festgelegt   früher von der Tabellenansicht, wie   Auswahl und Hintergrundfarbe. Nach   die Delegierten zurückkehren, die Tabellenansicht   setzt nur die Alpha- und rahmen   Eigenschaften, und auch dann nur, wenn   Animieren von Reihen, wie sie in schieben oder   out. "

Ich habe diese Informationen in diese gefunden Post von colionel . Danken Sie ihm!

Der beste Ansatz, den ich bisher gefunden habe, ist eine Hintergrundansicht der Zelle und klaren Hintergrund der Zelle Subviews einzustellen. Natürlich sieht das schön auf Tabellen mit nur indizierte Stil, egal mit oder ohne Zubehör.

Hier ist ein Beispiel, wo Zelle Hintergrund ist keucht gelb:

UIView* backgroundView = [ [ [ UIView alloc ] initWithFrame:CGRectZero ] autorelease ];
backgroundView.backgroundColor = [ UIColor yellowColor ];
cell.backgroundView = backgroundView;
for ( UIView* view in cell.contentView.subviews ) 
{
    view.backgroundColor = [ UIColor clearColor ];
}

Ganz einfach delegieren Klassendatei (.m) UITableView in Sie setzen:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell  forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UIColor *color = ((indexPath.row % 2) == 0) ? [UIColor colorWithRed:255.0/255 green:255.0/255 blue:145.0/255 alpha:1] : [UIColor clearColor];
    cell.backgroundColor = color;
}

Ich stimme mit Seba,    Ich versuchte, meine Wechselzeilenfarbe in der rowForIndexPath Delegatmethode zu setzen, sondern wurde immer inkonsistente Ergebnisse zwischen 3,2 und 4,2. Die folgenden funktionierte großartig für mich.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if ((indexPath.row % 2) == 1) {
        cell.backgroundColor = UIColorFromRGB(0xEDEDED);
        cell.textLabel.backgroundColor = UIColorFromRGB(0xEDEDED);
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
    }
    else
    {
        cell.backgroundColor = [UIColor whiteColor];
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
    }

}

Nach dem Versuch heraus alle verschiedene Lösungen, ist die folgende Methode die eleganteste ein. Ändern Sie die Farbe in der folgenden Delegatmethode:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (...){
        cell.backgroundColor = [UIColor blueColor];
    } else {
        cell.backgroundColor = [UIColor whiteColor];
    }
}

vlado.grigorov hat einen guten Rat - der beste Weg ist es, eine backgroundView zu erstellen, und geben, dass eine Farbe, alles andere an die Clear Einstellung. Außerdem glaube ich, dass Art und Weise der einzige Weg ist, um die korrekte Farbe zu löschen (versuchen, seine Probe - aber ‚Clear‘ anstelle von ‚yellowColor‘ gesetzt)., Das ist, was ich versuche zu tun

Anpassen der Hintergrund einer Tabellenansicht Zelle wird schließlich und „alles oder nichts“ -Ansatz. Es ist sehr schwierig, die Farbe oder das Bild für den Hintergrund einer Content-Zelle in eine Weise verwendet zu ändern, die nicht seltsam aussieht.

Der Grund dafür ist, dass die Zelle tatsächlich die Breite der Ansicht erstreckt. Die abgerundeten Ecken sind nur ein Teil der Zeichenstil und der Inhalt Ansicht sitzt in diesem Bereich.

Wenn Sie die Farbe des Inhalts Zelle ändern Sie mit weißen Bits sichtbar an den Ecken enden. Wenn Sie die Farbe der gesamten Zelle ändern, werden Sie einen Block von Farbe, um die Breite der Ansicht Spanning haben.

Sie können auf jeden Fall eine Zelle anpassen, aber es ist nicht ganz so einfach, wie man zunächst denken.

Erstellen Sie eine Ansicht und setzt diese als Hintergrund Ansicht der Zelle

UIView *lab = [[UIView alloc] initWithFrame:cell.frame];
            [lab setBackgroundColor:[UIColor grayColor]];
            cell.backgroundView = lab;
            [lab release];

Um auf N.Berendt Antwort verlängern - Wenn Sie Zellenfarbe festlegen mögen, basierend auf einem gewissen Zustand in dem eigentlichen Objekt Zellendaten, die zum Zeitpunkt konfigurieren Sie den Rest der Informationen für die Tabellenzelle, die in der Regel ist, wenn Sie in der cellForRowAtIndexPath Methode ist, können Sie dies tun, können die willDisplayCell Methode durch Überschreiben der Zelle Hintergrundfarbe von der Seitenhintergrundfarbe zu setzen - dies wird um die Frage der Offenlegung Taste Hintergründe usw. nicht richtig zu sein, aber noch können Sie Farbe steuern die cellForRowAtIndexPath Verfahren, in dem Sie alle Ihre anderen Zelle Anpassung tun.

So: Wenn Sie diese Methode, um Ihre Tabellenansicht Delegierten hinzu:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = cell.contentView.backgroundColor;
}

Dann in Ihrer cellForRowAtIndexPath Methode können Sie tun:

if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) {
    cell.contentView.backgroundColor = [UIColor blueColor];
}

Das spart mit Ihren Datenobjekte wieder in der willDisplayCell Methode zum Abrufen und auch zwei Stellen spart mit denen Sie Schneiderei / Anpassung Ihrer Tabellenzelle -. Alle Anpassungen in der cellForRowAtIndexPath Methode gehen

Erstellen Sie ein Bild als Hintergrund verwenden, um mit Photoshop oder Gimp und nennen Sie es myImage. Dann fügen Sie diese Methode, um Ihre Tableviewcontroller Klasse:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    UIImage *cellImage = [UIImage imageNamed:@"myimage.png"];//myimage is a 20x50 px with  gradient  color created with gimp
    UIImageView *cellView = [[UIImageView alloc] initWithImage:cellImage];
    cellView.contentMode = UIContentViewModeScaleToFill;
    cell.backgroundView = cellView;
    //set the background label to clear
    cell.titleLabel.backgroundColor= [UIColor clearColor];
}

Dies funktioniert auch, wenn Sie die UITableView, um benutzerdefinierte in Attribut-Inspektoren festgelegt haben.

Meine Lösung ist, den folgenden Code zu dem cellForRowAtIndexPath Ereignisse hinzuzufügen:

UIView *solidColor = [cell viewWithTag:100];
if (!solidColor) {

    solidColor = [[UIView alloc] initWithFrame:cell.bounds];
    solidColor.tag = 100; //Big tag to access the view afterwards
    [cell addSubview:solidColor];
    [cell sendSubviewToBack:solidColor];
    [solidColor release];
}
solidColor.backgroundColor = [UIColor colorWithRed:254.0/255.0
                                             green:233.0/255.0
                                              blue:233.0/255.0
                                             alpha:1.0];

Arbeitet unter keinen Umständen sogar mit Offenlegung Tasten und ist besser für Ihre Logik auf Zellen Farbzustand in cellForRowAtIndexPath als in cellWillShow Ereignisse zu handeln, denke ich.

Unterklasse UITableViewCell und fügen Sie diese in der Umsetzung:

-(void)layoutSubviews
{
    [super layoutSubviews];
    self.backgroundColor = [UIColor blueColor];
}
    UIView *bg = [[UIView alloc] initWithFrame:cell.frame];
    bg.backgroundColor = [UIColor colorWithRed:175.0/255.0 green:220.0/255.0 blue:186.0/255.0 alpha:1]; 
    cell.backgroundView = bg;
    [bg release];

Dies wird in der neuesten Xcode arbeiten.

-(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
    cell.backgroundColor = [UIColor grayColor];
}

Versuchen Sie folgendes:

- (void)tableView:(UITableView *)tableView1 willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
    tableView1.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"Cream.jpg"]];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top