2011-12-21 8 views
8

Quindi, sto cercando di cambiare il UILabel su un UIButton in un'istanza di FXLabel. Controlla il link per ulteriori informazioni su FXLabel (https://github.com/nicklockwood/FXLabel). Lo so usando le estensioni di classe (Subclass UIButton to add a property), potrei sempre aggiungere un'altra proprietà, nel mio caso, un FXLabel semplicemente aggiungendo una sottoview in sostanza. Tuttavia, mi piace la praticità e le funzionalità della proprietà titleLabel già presente.Posso * sostituire * UILabel su un UIButton con FXLabel?

C'è qualche metodo per "cambiare" lo UILabel per un FXLabel per sottoclasse o categoria?

So che potrei fare questo, ma è un tale hack e non è una prova futura. E non so come modificare il tipo di classe (Get UILabel out of UIButton).

UILabel *label; 
for (NSObject *view in button.subviews) { 
    if ([view isKindOfClass:[UILabel class]]) { 
     label = (UILabel *)view; 
     break; 
    } 
} 

Pensieri ?? Grazie.

risposta

5

Ecco un altro modo in cui è possibile accedere almeno all'etichetta. Creare una sottoclasse di UIButton e in tale sottoclasse sostituisce layoutSubviews. Da lì si può accedere direttamente l'etichetta:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UILabel *titleLabel = [self titleLabel]; 
} 

ora siamo ancora bloccati con il problema di cambiare questa etichetta di essere una sottoclasse. Immagino che potresti provare a scambiare dinamicamente la classe UILabel con la sottoclasse FXLabel (come dettagliata here), ma a essere onesti è piuttosto rischioso.

Direi che è meglio creare solo il proprio UIControl che è possibile personalizzare per i contenuti di cuori. Nessun rischio, solo pura bontà. Non dovrebbe essere troppo difficile imitare un semplice UIButton. In bocca al lupo!

+0

Grazie per il suggerimento. Penso che proverò a creare la mia classe personalizzata. Segnalo come risposta alla mia domanda se nessun altro mi dà qualcosa di meglio. Grazie! –

+1

L'ho appena hackerato e ho aggiunto l'etichetta sopra il pulsante senza effettivamente impostare il testo sul pulsante. Ora devo tenere traccia di due proprietà per le modifiche alfa, ecc, ma è molto più facile che provare a creare il mio UIControl. Ci lavorerò su in futuro e vedrò se ottengo qualcosa –

1

Mi dispiace dirlo ma non penso che si possa fare in modo affidabile. Anche se hai sottoclassificato UIButton e hai annullato i metodi titleLabel, dovresti anche gestire le impostazioni dello stato. E non si sa mai quando il codice interno si riferisce direttamente a un ivar privato per l'etichetta.

Ho creato una sottoclasse di UIButton per le mie app per fare qualcosa di simile (layout dei pulsanti personalizzati & sotto-visualizzazioni), mi dispiace non posso condividerlo ora, è di proprietà di un cliente. Non è troppo difficile creare il proprio codice di gestione dello stato per le proprie sottoview.

+0

Grazie per l'aiuto. Vedrò cosa posso mettere insieme. –