2013-03-26 24 views
5

Ho uno strano problema UISplitViewController. Ho un pulsante nel mio controller di visualizzazione principale che apre una vista modale quando viene toccato (usando un semplice storyboard seguito).Modale scomparendo dopo rotazione UISplitViewController

Ma la vista modale scompare quando ruoto l'iPad, ma solo quando si ruota da verticale a orizzontale. Il mio controller di visualizzazione principale è nascosto in verticale, come nell'applicazione di posta nativa.

Se sono in modalità orizzontale (quando il master è sempre visibile) e apro il mio modal, la rotazione del dispositivo funziona correttamente e il mio modal rimane sullo schermo.

Ho tentato manualmente di avviare i passaggi a livello di codice, se chiamo performSegueWithIdentifier: su splitViewController, la rotazione funziona in entrambe le direzioni. Ma mi chiedevo se questo fosse risolvibile in un modo più semplice perché ho altri pulsanti che mostrano le modali nel controller della vista principale e non voglio fare un'azione IB per ognuno e perdere i vantaggi dei seguiti dello storyboard.

risposta

1

sfortunatamente è così, quando il tuo ipad è in modalità verticale, hai un popover del tuo master, non è il master in un'altra forma. Che cosa significa che si sta presentando un modale utilizzando questo popover come presentingViewController, in modo che quando si passa da verticale a orizzontale del metodo splitViewController:willShowViewController renderà il vostro nil popover come si può vedere:

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 
{ 
    // Called when the view is shown again in the split view, invalidating the button and popover controller. 
    [self.navigationItem setLeftBarButtonItem:nil animated:YES]; 
    self.masterPopoverController = nil; 
} 

così ho capito che è accettabile che il vostro modale sta andando con esso. Quindi, con questo capisci perché quando metti la tua azione a chiamare lo performSegueWithIdentifier: sul tuo splitViewController non succede, la tua modale non è più connessa con il tuo popover.

Quindi potresti chiederti perché non accade quando ti sposti da orizzontale a verticale .. e il motivo è splitViewController:willHideViewController, nasconde il viewController che non lo rimuove, quindi la tua modale è sempre connessa.

Così, purtroppo non esiste una soluzione e si dovrà eseguire le azioni per codice ..

Spero che aiuta,

Roberto

Problemi correlati