2014-07-11 13 views
5

Quando si utilizzano gli stili incorporati (sottotitoli, dettagli di destra, ecc.) Per UITableViewCell s, è possibile accedere facilmente alle etichette di testo con textLabel e detailTextLabel, che sono proprietà dello UITableViewCell, indipendentemente dallo stile scelto. Ho usato questo a mio vantaggio per implementare codice riutilizzabile che mi consente di applicare stili specifici a tutte le mie celle statiche. Ma ora voglio convertirli tutti in una cella di stile personalizzata, ma con questo stile ho ancora solo due etichette. La mia domanda è, è possibile impostare manualmente le proprietà textLabel e detailTextLabel per una cella personalizzata? Se è così, non avrei dovuto cambiare il mio codice, avrei semplicemente dovuto semplicemente impostare le proprietà dell'etichetta. Altrimenti, dovrò cambiare tutto il mio codice per indirizzare ogni singola etichetta per ogni singola cella che sarà davvero disordinata.È possibile impostare la textLabel di una cella personalizzata?

Per un esempio di quello che sto facendo, ho un metodo che accetta in un UITableViewCell e in quel metodo posso abilitare o disabilitare quella cella, che cambia i colori del testo delle etichette in nero o grigio chiaro a seconda dei casi. Se non riesco ad accedere alle proprietà textLabel e detailTextLabel, ho bisogno di aggiungere le istruzioni if ​​per confrontare il parametro della cella con le mie celle per sapere quali etichette devo cambiare.

+0

Avrai accesso a 'textLabel' e' detailTextLabel' poiché suppongo che la tua cella personalizzata sarà una sottoclasse di UITableViewCell. – hgwhittle

risposta

7

Si può! Implementa semplicemente i getter per le etichette da reindirizzare alle etichette della cella personalizzata.

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

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

Grazie, è esattamente quello che stavo cercando! Ho incontrato un problema però. Ho sottoclasse 'UITableViewCell', ho aggiunto etichette ad un XIB, il controllo le abbiamo trascinate nella sottoclasse e ho restituito quelle etichette come hai detto tu, poi nello storyboard ho cambiato la classe personalizzata di ogni cella nella mia sottoclasse e rimosso le etichette che avevo in quello storyboard cellula. Ho controllato il trascinamento di quelle celle dello storyboard al mio controller di visualizzazione tabella e in 'viewDidLoad' ho provato a impostare il testo ma non appare nulla. Debugger mostra che l'etichetta del titolo è 'nil' quindi' self.custCell.textLabel.text = @ "a" 'non fa apparire a nella cella. – Joey

+0

Queste celle statiche provengono da uno storyboard? – CrimsonChris

+0

Sì. Ho deciso di adottare un approccio diverso e aggiungere una terza etichetta alla cella invece di creare una cella completamente personalizzata, ma ciò nonostante mi piacerebbe sapere cosa stavo facendo male. – Joey

0

Nella cella personalizzato, è necessario aggiungere tutti i punti di vista in contentView. Questo è il modo progettato e l'utilizzo di e esistenti non è consigliato perché potrebbe causare un comportamento non definito mediante la logica di layout incorporata. (Non li ho usati. Potrebbero funzionare bene, ma non correrò il rischio)

Se si desidera evitare di applicare patch a tutto il codice esistente, è possibile provare la sottoclasse e sovrascrivere le proprietà sulle etichette create dall'utente.

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