2011-10-18 10 views
23

che vi presento modale utilizzando il seguente codice:iOS 5: -viewWillAppear non è chiamato dopo che respinge il modal in iPad

AddName *add = [[AddName alloc] initWithNibName:@"AddName" bundle:nil] 
add.modalPresentationStyle = UIModalPresentationFormSheet; 

[self presentModalView:add animated:YES]; 

e dopo il mio lavoro uso seguente codice per tornare sul mio punto di vista principale.

[self dismissModalViewControllerAnimated:YES]; 

Quindi è possibile chiamare -viewWillAppear per impostazione predefinita.

mio problema è che,

Si stava lavorando bene con iOS4.3.

Ma non funziona con iOS5.

Cosa devo fare? O c'è qualche bug in iOS5?

+0

È il problema che non viene chiamato -viewWillAppear? O è che la finestra modale non viene presentata? – gaige

+0

@gaige: YES -viewWillAppear non viene chiamato – Devang

+0

@Devang: rimuovere 'add.modalPresentationStyle = UIModalPresentationFormSheet;' e chiamerà il metodo viewWillAppear. Si prega di controllare su di esso. –

risposta

11

-viewWillAppear è garantito solo per essere chiamato in luoghi in cui è stato chiamato anche il -viewWillDisappear. Per la maggior parte delle finestre modali sull'iPad, questo non è il caso, dal momento che non oscurano l'intera pagina.

La soluzione al problema dipenderà da cosa è necessario il -viewWillAppear per, ma in generale, è probabile che sia necessario effettuare una chiamata direttamente dallo stesso posto in cui si chiude il controller della visualizzazione modale.

Un meccanismo comune per questo, specialmente nei casi in cui si potrebbe usare la stessa vista modale da qualche altra parte, è di dare al controller di visualizzazione modale un delegato che viene chiamato quando la vista sta per sparire. Questo ti darà la possibilità di prendere le risposte dalla finestra modale, o anche solo forzare un ricaricamento dei dati nella vista delegato.

Spero che questo aiuti.

+6

Invece di un delegato in iOS5 puoi provare [[autoprocededisplayController] viewWillAppear: YES]; – NJones

+0

@NJones mentre è vero che puoi chiamare viewWillAppear: lo suggerirei, poiché ha altri effetti collaterali (poiché la documentazione rileva che DEVI chiamare super). – gaige

+0

Immagino che intendessi che non lo consiglieresti? – NJones

9

iOS 5 ha definitivamente cambiato le chiamate su viewWillAppear e viewWillDisappear. Ad esempio, le sottoview (View Controller's views come subviews per l'esattezza) in un UIScrollView, viewWillDisappear verranno richiamate quando si spinge un altro controller di visualizzazione nello stack. Tuttavia, quando il controller di visualizzazione è spuntato, viewWillAppear non viene chiamato. Questi metodi non sono mai stati richiamati in iOS 4 nelle sottoview UIScrollView.

Questo è uno strano comportamento per me. Accoppia il fatto che, indipendentemente da cosa dovrebbe accadere, se si può fare affidamento su ciò che accade in iOS 4, non dovrebbe funzionare diversamente in iOS 5. La maggior parte delle volte, non ho idea di quale particolare istanza sia chiamata , Di solito provo ed errore mentre sono nella zona di codifica. Se funziona come mi piace, vado avanti. Poi arriva iOS 5 e lancia una palla demolitrice in tutto.

Ho anche provato quando una vista UINavigationController's è una visualizzazione secondaria, e un ViewController viene spinto sulla pila controller di navigazione, viewWillAppear non viene mai chiamato in iOS 4, ma che vengono chiamati in iOS 5. Go figura.

+0

E chiunque abbia votato, prova questo progetto con il simulatore iOS 4 e iOS 5 e dimmi che hai ottenuto il punto di interruzione in entrambi i sim ... è una dichiarazione NSLog in FirstViewController.m. https://docs.google.com/open?id=0B5DJHlwe-2MTYjY0ZDMyMzgtY2Q3Zi00NzRlLWEyYmQtMGY0YjgzMDNjZDdk – Vinnie

2

Ho avuto lo stesso problema. Ho trovato che viewWillAppear non viene chiamato dopo aver chiuso il modal ma lo è viewDidAppear. Quindi prova solo lo viewDidAppear.

+1

Nella vista modale ho aggiunto 'presentingViewController.viewDidAppear (true)' e poi ha funzionato, ma ha aggiunto la chiamata updateUI() (private func). –

+0

non funziona. E sembra che non sia mai stato praticabile –

Problemi correlati