Sto usando un UISplitViewController
all'interno di un UITabBarController
con una pianura UIViewController
nel riquadro padrone di visualizzare le due parti e un UINavigationController
nel riquadro dettagli, che a sua volta contiene una vaniglia UIViewController
.metodi delegato UISplitViewController non chiamati
Sono consapevole del fatto che Apple consiglia di utilizzare le viste divise solo a livello di root, tuttavia ho visto altre applicazioni (ad esempio la scheda di Amazon- 'Wish List') che utilizzano viste divise in schede quindi sono sicuro che sia possibile .
Il mio problema è che i metodi delegati della vista divisa, vale a dire. quelli in UISplitViewControllerDelegate
non vengono richiamati, il che impedisce di creare il mio menu popup quando si passa alla modalità verticale.
I metodi in questione sono i seguenti -
// Called when a button should be added to a toolbar for a hidden view controller
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc;
// Called when the view is shown again in the split view, invalidating the button and popover controller
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;
// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers.
- (void)splitViewController: (UISplitViewController*)svc popoverController: (UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController;
Il UISplitViewController
fa ricevere le notifiche di rotazione.
posso ottenere il metodo willShowViewController di essere chiamato se forzo la barra di stato l'orientamento a destra del paesaggio (o sinistra) all'inizio del lancio app, utilizzando
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
Tuttavia, i willHideViewController
doesn essere chiamato E non voglio forzare l'avvio dell'applicazione in orizzontale. Se faccio la stessa cosa ma la costringo a ritratto, non ricevo le callback.
Non capisco perché il controllore della vista divisa non stia chiamando i suoi metodi delegati quando si comporta diversamente. Tali metodi dovrebbero essere chiamati dalla method-
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
internamente, e quando breakpoint all'interno di questa, è possibile verificare che il delegato è impostato e che è ancora vivo.
Sono rimasto bloccato su questo tutto il giorno! Tutto il resto funziona alla grande e sono molto contento che la combinazione splitview/tabbar/navbar funzioni bene. Ho solo bisogno di queste notifiche.
Devo forse chiamarli manualmente quando ruoto? Sembra molto sbagliato quando il `UISplitViewController 'dovrebbe fare questo.
Ciao, ti dispiacerebbe elaborare ulteriormente la tua soluzione? Ho lo stesso problema in questo momento. Ho ottenuto 1 tabcontroller che ha una splitview in 3 schede. Ho aggiunto la view detail in ogni splitview a un proprio controllore di navigazione sottoclassato che delega la splitview. Funziona perfettamente per la scheda attualmente visibile ma non per gli altri. Quindi quando ruoto la mia vista e cambio la scheda sembra tutto incasinato, finché non lo ruoto. Di nuovo, quindi solo per la vista visibile. –
hmm scusate non ne sono sicuro .. Sono sicuro di aver visto un post qui da qualche parte che indicava che il passaggio tra le schede di splitview e la rotazione causava problemi e che lo splitviwe dovrebbe sempre essere a livello di finestra - nemmeno sotto un controller di schede. Che è supportato dai documenti che immagino. In realtà sto prendendo il percorso di costruire il mio SplitView da zero in quanto richiede divisioni orizzontali – Sam
Invece di provare da zero, prova questo - http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad – Viraj