Ho una classe personalizzata UIView
chiamata MyView
che uso insieme a uno UIViewController
configurato tramite lo storyboard. La maggior parte delle proprietà della vista è configurata tramite Interface Builder; Tuttavia, ho bisogno di regolare un paio di immagini di programmazione prima di impostare come sfondi per il mio tasto, in questo modo:Regolazione di UIView dopo il caricamento dallo storyboard
-(void)setupVisuals {
UIImage *image = [[UIImage imageNamed:@"myButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
// _myButton is an IBOutlet property set through the storyboard:
[_myButton setBackgroundImage:image forState:UIControlStateNormal];
}
Il problema è che non riesco a chiamare [self setupVisuals]
dal initializer *, perché _myButton
è nil
a quella volta.
ho risolto il problema con l'aggiunta di questa linea di MyViewController
s' viewDidLoad:
[(MyView*)self.view setupVisuals];
Con questo richiamo a posto, tutto funziona bene. Tuttavia, questo sembra un work-around, piuttosto che una soluzione a quello che è probabilmente un problema relativamente comune.
Esiste un metodo UIView
per ignorare, o qualsiasi altro meccanismo per completare l'inizializzazione di immagini MyView
s' senza attingere al meccanismo viewDidLoad:
?
* In questo caso, l'inizializzatore è
initWithCoder:
perché la vista è caricato dal storyboard. Ho verificato che l'inizializzatore venga chiamato correttamente, ma le immagini non sono ancora pronte.
IIRC 'initWithFrame:' viene chiamato anche se si carica da un NIB/XIB. Da lì, dopo una chiamata a 'super', non puoi farlo? Ricordo di avere un problema simile e l'ho risolto, ma non ricordo cosa/come fosse esattamente. –
In questi casi, di solito faccio "inizializzazione" in 'viewWillAppear', ma se c'è un modo più semplice per gestirlo, mi piacerebbe sapere. Fondamentalmente quando la vista è caricata dallo storyboard con tutti i suoi punti vendita intatti? –
Hai provato solo [self.myView setupVisuals] dal metodo viewWillAppear nel tuo viewController? Se hai inizializzato quella vista in IB e l'hai impostata come presa, questo dovrebbe funzionare. –