2014-07-11 26 views
5

Wenn Sie die integrierten Stile (Untertitel, rechte Details usw.) für UITableViewCell verwenden, können Sie sehr einfach auf die Textbeschriftungen mit textLabel und detailTextLabel zugreifen, die Eigenschaften auf der UITableViewCell sind, egal welchen Stil Sie wählen. Ich nutzte dies zu meinem Vorteil, um wiederverwendbaren Code zu implementieren, der es mir ermöglicht, bestimmte Stile auf alle meine statischen Zellen anzuwenden. Aber jetzt möchte ich sie alle in eine benutzerdefinierte Stil Zelle konvertieren, aber mit diesem Stil werde ich immer noch nur zwei Etiketten haben. Meine Frage ist, ist es möglich, die textLabel und detailTextLabel Eigenschaften für eine benutzerdefinierte Zelle manuell festzulegen? Wenn das der Fall wäre, müsste ich meinen Code nicht ändern, ich müsste lediglich die Eigenschaften des Labels festlegen. Ansonsten muss ich meinen gesamten Code ändern, um jedes einzelne Label für jede einzelne Zelle anzusteuern, was wirklich unordentlich wird.Ist es möglich, eine benutzerdefinierte Zelle textLabel zu setzen?

Für ein Beispiel von dem, was ich tue, habe ich eine Methode, die in einer UITableViewCell akzeptiert und in dieser Methode kann ich aktivieren oder deaktivieren Sie diese Zelle, die die Etiketten Textfarben in schwarz oder hellgrau wie geeignet ändert. Wenn ich nicht auf die Eigenschaften textLabel und detailTextLabel zugreifen kann, muss ich if-Anweisungen hinzufügen, um den Zellenparameter mit meinen Zellen-Steckdosen zu vergleichen, um zu wissen, welche Etiketten ich ändern muss.

+0

Sie haben Zugriff auf 'textLabel' und' detailTextLabel', da ich davon ausgehe, dass Ihre benutzerdefinierte Zelle eine Unterklasse von UITableViewCell sein wird. – hgwhittle

Antwort

7

Sie können sicher! Implementieren Sie einfach die Getter, damit die Labels zu den Etiketten Ihrer benutzerdefinierten Zelle umgeleitet werden.

- (UILabel *)textLabel { 
    return self.myCustomCellTextLabel; 
} 

- (UILabel *)detailTextLabel { 
    return self.myCustomCellDetailTextLabel; 
} 
+0

Danke, genau das habe ich gesucht! Ich bin jedoch auf ein Problem gestoßen. Ich habe 'UITableViewCell' subclasifiziert, einem XIB Labels hinzugefügt, das Steuerelement in die Unterklasse gezogen und diese Label zurückgegeben, dann habe ich im Storyboard die benutzerdefinierte Klasse jeder Zelle in meine Unterklasse geändert und die Labels in diesem Storyboard entfernt Zelle. Ich habe diese Storyboard-Zellen auf meinen TableView-Controller gezogen und in 'viewDidLoad' habe ich versucht, den Text zu setzen, aber nichts erscheint. Der Debugger zeigt an, dass das Titeletikett "nil" ist, also verursacht 'self.custCell.textLabel.text = @" a "' kein Erscheinen in der Zelle. – Joey

+0

Sind diese statischen Zellen aus einem Storyboard? – CrimsonChris

+0

Ja. Ich entschied mich für einen anderen Ansatz und fügte der Zelle nur ein drittes Label hinzu, anstatt eine komplett benutzerdefinierte Zelle zu erstellen, aber trotzdem würde ich gerne wissen, was ich falsch gemacht habe. – Joey

0

In benutzerdefinierte Zelle müssen Sie alle Ansichten in contentView hinzufügen. Dies ist der vorgesehene Weg und die Verwendung der vorhandenen textField und detailTextField wird nicht empfohlen, da dies zu einem nicht definierten Verhalten durch die eingebaute Layout-Logik führen kann. (Ich habe sie nicht verwendet. Sie können gut funktionieren. Aber ich werde nicht das Risiko eingehen)

Wenn Sie alle vorhandenen Code patchen möchten, können Sie versuchen, Unterklasse und überschreiben die Eigenschaften zu Etiketten, die von Ihnen erstellt.

@interface CustomCell1 : UITableViewCell 
@end 
@implementation CustomCell1 
{ 
    UILabel* _your_custom_label1; 
} 
- (UILabel*)textLabel 
{ 
    return _your_custom_label1; 
} 
@end 
Verwandte Themen