2017-12-31 46 views
0

So habe ich eine benutzerdefinierte Tabellenansicht Zelle, die ich in einer eigenen XIB entworfen, mit ein paar Etiketten und Bildern.Label-Eigenschaften der Tabellenansicht Zelle abhängig von Daten aktualisieren

Ich versuche, die Hintergrundfarbe eines dieser Etiketten abhängig von dem Text auf dem Etikett & geben abgerundete Kanten zu aktualisieren.

Ich versuche dies für die Kanten mit dem folgenden Code, aber es funktioniert nicht, und ich bin nicht sicher, wo dieser Code für es sein muss, um jede Zelle zu aktualisieren, während es scrollt.

Das Text- und Kartenbild wird korrekt angezeigt.

+1

"Es funktioniert nicht" können Sie erarbeiten, was nicht funktioniert? –

Antwort

3

Die Zelle hat keinen Rahmen in cellForRowAtIndexPath, daher ist der Eckenradius nicht festgelegt. In diesem Fall sollten Sie den Eckenradius in willDisplayCell einstellen.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (yourCellShouldHaveRoundedCorners) { 
     cell.layer.cornerRadius = cell.bounds.size.height/8; 
    } 
} 

Die Hintergrundfarbe des Etiketts sollte in cellForRowAtIndexPath arbeiten.

Auch sehe ich, dass Sie eine Menge Eigenschaften auf die Zelle in cellForRowAtIndexPath (d. H. Typ, Angriff, Verteidigung und so weiter). Da Sie bereits eine benutzerdefinierte Zelle haben, wäre es besser, eine -Eigenschaft für die Zelle zu erstellen und alle diese Eigenschaften auf den Setter dieses Objekts festzulegen.

Auf diese Weise müssen Sie nur cell.managedObject = card aufrufen und der Setter wird die anderen Eigenschaften einstellen.

Dieser Ansatz ist eher modellorientiert und kann Ihnen einige Code-Duplizierungen ersparen.

0

Try feste Anzahl als cell.type.bounds.size.height verwenden wird auf einen korrekten Wert in cellForRowAt

diese

-(void)layoutSubviews 
{ 
    self.type.layer.cornerRadius = self.type.bounds.size.height/8; 
} 
zu Zellklasse nicht machen
cell.type.layer.cornerRadius = 10 ; 

cell.type.clipsToBounds = YES; 

OR hinzufügen

In Bezug auf die Farbe wird es perfekt funktionieren in cellForRowAt so

if(yourLogic) 
{ 
    cell.type.backgroundColor = [UIColor redColor]; 

} 
else 
{ 
    cell.type.backgroundColor = [UIColor greenColor]; 
} 
+1

Das hat Spaß gemacht! Dank dafür. Offensichtlich im Nachhinein würde das nicht funktionieren, da die Zelle noch nicht gerendert hat, so dass das Label keine Höhe hat. – meltonCG

Verwandte Themen