2010-10-17 14 views
5

Ho un ViewController che aggiunge alle altre viste secondarie che hanno sottoclasse UIViewControllersviewDidAppear/viewWillAppear non essere chiamato

quindi è come questo:

mainViewController 
     | 
    v---------v 
subVC1 subVC2 

E nemmeno subVC1 o subVC2 hanno la viewDidAppear/viewWillAppear sparato su loro? Il controller della vista principale viene creato nel delegato dell'app e viene aggiunto anche lì alla finestra.

Ecco un progetto Xcode per mostrare il mio problema: http://www.qfpost.com/download.do?get=92f03538907e72665ea794d98ff8392b

risposta

5

Ho dato un'occhiata al tuo codice. Quindi il problema è che viewWillAppear/viewDidAppear viene chiamato quando la vista viene aggiunta alla finestra, non a una sua sottoview. Si potrebbe voler usare viewDidLoad per questo.

+0

Davvero, non ho mai dovuto farlo prima? –

+0

Nel tuo esempio, aggiungi la vista del tuo subVC2 alla vista del tuo mainViewController. Questo non chiama viewDidAppear, perché questo metodo viene chiamato quando lo aggiungi all'oggetto "finestra" dell'applicazione. Altri due errori che hai fatto nel tuo esempio: inizializzi il tuo subVC2 con il metodo "init". Penso che tu voglia usare quello che hai costruito nel pennino. È necessario utilizzare initWithNibName: bundle: method. Ultima cosa, potresti voler rilasciare subVC2 quando hai aggiunto la sottoview, perché non tieni alcun riferimento ad esso. – Julien

+0

Oh non intendevo usare un pennino, ma non dovrei rilasciare subVC2 perché ho solo passato la vista di subvc2 al metodo addsubview non all'intero viewcontroller? E 'anche questo su VW/DA su iPhone, perché giuro che non è mai successo prima a me. –

1

In primo luogo, sei sicuro che effettivamente bisogno di fare quello che stai facendo con questa gerarchia di UIViewControllers? Perché il tuo MainViewController non può gestire le visualizzazioni a cui sono responsabili le tue subVC1 e subVC2?

In secondo luogo, la vistaWillAppear/viewDidAppear verrà chiamata quando si scrive il codice per chiamarli dal proprio MainViewController. Senza sapere altro sulla tua progettazione, non è davvero possibile consigliarti quando dovresti chiamarli, ma se le viste dei sottocontroller devono essere sempre visibili quando la vista 'principale' è visibile, allora probabilmente ha senso chiamarle dai metodi viewWillAppear/viewDidAppear del tuo mainViewController.

Problemi correlati