2013-03-07 12 views
23

Sto provando a sottoclasse UIView. Ho già un inizializzatore designato e voglio avere la possibilità di inizializzare la mia vista personalizzata dal codice o dal file Nib. Quindi, Apple ci ha detto di usare l'inizializzatore designato, ma non lo fanno da soli - initWithCoder: non chiama initWithFrame:. Cosa devo fare per far chiamare il mio inizializzatore designato in entrambe le situazioni? Non c'è modo di farlo?Come eseguire l'override di initWithFrame: e initWithCoder: in sottoclasse di UIView?

+0

dare uno sguardo qui per favore e vedere il codice di esempio http://stackoverflow.com/a/17798646/381807 – nesimtunc

risposta

39

Imballare l'inizializzazione speciale in un unico metodo. Può essere privato (dichiarato in .m). Quindi eseguire l'override di entrambi gli inizializzatori e chiamare il metodo init dall'interno di essi.

- (void)myInitialization 
{ 
    //do your stuff 
} 

- (id)initWithFrame:(CGRect)aRect 
{ 
    self = [super initWithFrame:aRect]; 

    if (self) 
    { 
     [self myInitialization]; 
    } 

    return self; 
} 

- (id)initWithCoder:(NSCoder*)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) 
    { 
     [self myInitialization]; 
    } 

    return self; 
} 
+0

facciamo non è necessario includere '- (instanceType) init' initializer ..? Nel caso in cui. Sono nuovo all'obiettivo C. – shashwat

+0

Non è necessario - le sottoclassi di 'UIView' sono raramente inizializzate da _simple_' init'. In alcuni casi potrebbe avere senso includere anche 'init', vale a dire: se un certo tipo di vista verrebbe in genere inizializzato con una cornice fissa o qualcosa del genere. –

5

Come hai detto:

initWithFrame: - Si consiglia di implementare questo metodo. L'utente può anche implementare metodi di inizializzazione personalizzati in aggiunta a, o anziché questo metodo.

initWithCoder: - Implementare questo metodo se si carica la vista da un file nib Interface Builder e la visualizzazione richiede personalizzato inizializzazione.

Quello che vorrei fare è solo un metodo che entrambi chiamerebbero, che avrebbe un comportamento comune che si desidera implementare nel proprio UIView.

Problemi correlati