2012-04-05 11 views
21

Ho un progetto iPad XCode utilizzando un controller di navigazione. Ho cercato di ottenere un pulsante per spingere un UISplitViewController allo stack di navigazione, ma ottenuto questo errore:iOS: UISplitViewController non può essere trasferito su UINavigationController

Split View Controllers cannot be pushed to a Navigation Controller

Risulta UISplitViewController non gioca bene con UINavigationController. Tuttavia, ho ancora bisogno di mostrare il controller della vista divisa quando viene cliccato questo pulsante. Come faccio a fare questo? E, anche importante, come faccio a fare un pulsante indietro in modo che l'utente possa essere restituito al controller di navigazione?

risposta

28

Per visualizzare un SplitViewController è necessario utilizzare setRootViewController. Questo perché uno SplitViewController deve essere il controller della vista radice.

Dalla documentazione di Apple:

A split view controller must always be the root of any interface you create. In other words, you must always install the view from a UISplitViewController object as the root view of your application's window. The panes of your split-view interface may then contain navigation controllers, tab bar controllers, or any other type of view controller you need to implement your interface.

Per tornare avrete bisogno di utilizzare setRootViewController per tornare alla pagina precedente. Mi sono imbattuto in questo problema quando ho convertito la mia app per iPhone in universale e ho finito per utilizzare un controller di navigazione per iPhone e impostareRootViewController per la versione per iPad. È un po 'faticoso perché non è possibile animarlo piacevolmente without a bit of fudging.

+0

Come utilizzare setRootViewController? Google mi dice che è un metodo di UIWindow, ma non riesco a capire dove trovare un'istanza UIWindow. –

+2

È necessario prenderlo come proprietà dal delegato dell'app, in questo modo: MyAppDelegate * appDelegate = (MyAppDelegate *) [[UIApplication sharedApplication] delegate]; e quindi [appDelegate.window setRootViewController: shareSelectViewController]; – glenstorey

+0

grazie mille! –

Problemi correlati