2013-01-08 6 views
8

Sto riscontrando problemi nell'utilizzo di TransitionfromView durante la transizione tra le visualizzazioni nella mia app.TransitionFromView rimuove la vista precedente

Setup

Questa è la configurazione di base del controller della vista. Ha due viste in esso. Un MKMapView e un UITableView. Quando si preme il pulsante di commutazione, si suppone di alternare le visualizzazioni tra la mappa e il tavolo.

Questo è il mio file * .h

@interface BrowseBeaconsViewController : UIViewController <UITableViewDelegate, MKMapViewDelegate, UITableViewDataSource, CLLocationManagerDelegate > 
{ 

__weak IBOutlet UIBarButtonItem *refreshBeacons; 
__weak IBOutlet UIBarButtonItem *toggleView; 
MKMapView* beaconMapView; 
__weak IBOutlet UITableView* beaconTableView; 
} 

Così il Tableview proviene dallo storyboard, mentre mapview si crea nel programma.

Problemi

[UIView transitionFromView:beaconTableView toView:beaconMapView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {}]; 

Quando transizione da TableView dal MapView valore del Tableview è nullo (0x0000000). Capisco il comportamento del transitionfromview è quello di rimuovere la vista dalla vista genitore. Ma quando provo ad aggiungere la tableview come sottoview dopo la transizione, non funziona, poiché il valore è nullo. Quindi la mia domanda è: come posso aggiungere il tableview dopo la transizione se la vista è annullata?

PS: Mi scuso se questa è una domanda semplice, ma sono nuovo alla programmazione iOS e ho provato a cercare nei forum prima di pubblicare questa domanda.

risposta

29

Dalla documentazione su quel metodo:.

"Per impostazione predefinita, la visualizzazione in fromView viene sostituito nella gerarchia vista dalla vista in toview Se entrambe le visualizzazioni sono già parte della gerarchia di vista, è possibile includere il UIViewAnimationOptionShowHideTransitionViews opzione nel parametro options per semplicemente nasconderli o mostrarli. "

Quindi, se si desidera che entrambe le viste rimangano, aggiungere beaconMapView alla gerarchia di viste e includere l'opzione UIViewAnimationOptionShowHideTransitionViews.

+0

Grazie. – omgpython

+0

molto bello, grazie – kernix

+0

Questo funziona. Ma ho un'altra domanda. Come decidere quale vista è in primo piano? Perché sto usando questo in una cella di visualizzazione della raccolta. –

2

È necessario mantenere un riferimento separato a beaconTableView o semplicemente dichiararlo come forte anziché debole. Poiché beaconTableView è stato dichiarato debole, iOS 5+ capisce che non ne hai bisogno in giro una volta che tutti gli altri riferimenti sono stati rimossi, in questo caso rimuovendolo dalla sua visualizzazione genitore.

0

Rimuovi debole, altrimenti la vista viene rilasciata non appena non è più necessaria.