2013-02-07 15 views
6

Sto lavorando a un'applicazione in cui la maggior parte dell'interfaccia utente è configurata tramite uno storyboard in Xcode. Una cosa che voglio fare è specificare le immagini "Finite" per UITabBarItems su un TabBar piuttosto che le immagini "Stencil" predefinite a cui è possibile accedere tramite Interface Builder.Impostazione delle immagini TabBar finite quando si usano gli storyboard?

La mia domanda è dove è il posto migliore per farlo, attualmente lo sto facendo in awakeFromNib come deve essere fatto quando le cose non sono archiviate dallo storyboard, ma non sono sicuro se dovrei usare initWithCoder: invece, quale è la cosa migliore che conta?

- (id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if(self) { 
     UIImage *tabIn = [UIImage imageNamed:@"TAB_IN"]; 
     UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"]; 

     UITabBarItem *tabBarItem = [self tabBarItem]; 
     [tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn]; 
     [tabBarItem setTitle:@"TWO"]; 
    } 
    return self; 
} 

O

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    UIImage *tabIn = [UIImage imageNamed:@"TAB_IN"]; 
    UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"]; 

    UITabBarItem *tabBarItem = [self tabBarItem]; 
    [tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn]; 
    [tabBarItem setTitle:@"TWO"]; 
} 

Sono consapevole che initWithCoder: è chiamato all'inizio di oggetti disarchiviazione da naselli (contenuta nel storyboard) quando prese e le azioni non sono ancora agganciati. Capisco anche che awakeFromNib viene chiamato alla fine del processo di annullamento dell'archiviazione e segnala che viewController è ora pronto per l'uso. La mia sensazione è che dipende solo da ciò che si vuole fare, anche se l'utilizzo di awakeFromNib potrebbe rivelarsi meno problematico in quanto non si verificheranno problemi in cui punti vendita e azioni non sono ancora stati collegati.

EDIT:

Mi permetta di riformulare questo, quali situazioni usereste initWithCoder: come apposto awakeFromNib e viceversa?

risposta

2

Sembra che tu abbia già risposto alla tua domanda nel paragrafo prima della modifica.

Le documentation stati che

Quando un oggetto riceve un messaggio awakeFromNib, si è garantito per avere tutte le sue variabili di istanza presa impostate.

Quindi, se si deve accedere IBOutlet Ivars nel codice di inizializzazione, bisogna farlo nel metodo awakeFromNib.

Anche se preferisco initWithCoder: nei casi in cui non ho bisogno di accedere sbocchi perché è il metodo initialiser appropriato per oggetti decodificata con NSCoding protocollo secondo NSCoding documentation:

initWithCoder: indica l'oggetto per l'inizializzazione dai dati nel codificatore fornito; come tale, sostituisce qualsiasi altro metodo di inizializzazione e viene inviato solo per oggetto

Come nota laterale, però, non fare molta differenza e nei casi quando devo punti di accesso nella mia inizializzazione codice, non attuare sia awakeFromNib e initWithCoder: per motivi di semplicità. Quindi, se sono coinvolti punti vendita, di solito implemento awakeFromNib e faccio tutto l'inizializzazione lì.

+0

Grazie Egor, molto apprezzato. – fuzzygoat

Problemi correlati