2013-08-04 14 views
10

Per inizializzare una vista con xib, utilizzo la funzione initWithCoder. Ma cosa succede se ho bisogno di inizializzare lo xib con parametro personalizzato.Inizializzazione di una vista con initWithCoder personalizzato

ho bisogno di qualcosa di simile:

- (id)initWithCoder:(NSCoder *)aDecoder 
      andTitle:(NSString *)titleString 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     self.titleLabel = titleString; 
    } 
    return self; 
} 

E quando non lo chiamo? Dopo awakeFromNib?

risposta

11

Non è possibile modificare il metodo initWithCoder: in questo modo poiché il metodo è definito in un protocollo che non si controlla. Invece è necessario chiamare il metodo setTitle: dopo che l'oggetto è stato creato, possibilmente in awakeFromNib, o dal controller proprietario.

+0

non si imposta il campo personalizzato in awakeFromNib – Chisx

+0

@ SÄN perché non si imposta il testo di un'etichetta in awakeFromNib? – Wain

9

Non si chiama initWithCoder da soli, di solito, quindi non è possibile passare ad esso parametri personalizzati. Tale metodo sarebbe chiamato dal meccanismo di caricamento del pennino e non si ha il controllo su di esso.

Sicuramente non lo chiameresti da sveglioDaDrb: l'oggetto sarebbe già stato inizializzato da quel punto in modo da non poterlo richiamare.

La soluzione più semplice è esporre i parametri personalizzati come proprietà e impostarli appena dopo aver creato la vista.

+1

D'accordo, vorrei davvero poter creare un metodo init personalizzato per passare i parametri in modo che avvenga tutto in una volta. –

+0

Che dire di Swift ... se voglio passare le mie proprietà personalizzate nel metodo initwithcoder che vorrei dichiarare come let .... come posso farlo? –

Problemi correlati