2010-09-21 16 views
7

Ho riscontrato un problema con un'app per iPad in cui mi piacerebbe avere UINavigationControllers in entrambe le viste in un UISplitView. Ho esaminato altre domande simili qui, ma la maggior parte si collega a un tutorial online che non risolve completamente il problema. Ecco una panoramica di 2 minuti per ricreare il problema riscontrato:Posso usare un UINavigationController come vista dettagliata di un UISplitViewController?

  1. Creare un nuovo progetto in XCode, a partire dal modello di applicazione basato su visualizzazione divisa.
  2. aggiungere la seguente istruzione NSLog come prima linea nel metodo willHideViewController del DetailViewController:

    NSLog (@ "barra degli strumenti:% @", barra degli strumenti);

Se si esegue l'applicazione ora, il registro mostrerà che la barra degli strumenti di DetailViewController è viva e vegeta. Ora ...

  1. Aprire MainWindow.xib ed espandere SplitViewController.
  2. Trascinare un controller di navigazione dalla libreria sopra DetailViewController.
  3. Espandere il nuovo controller di navigazione e modificare la classe di UIViewController all'interno di DetailViewController.
  4. Ctrl-trascinare da SplitViewController a DetailViewController e assegnarlo come delegato.
  5. Salva MainWindow.xib ed esegui di nuovo l'app.

A questo punto, la vista di dettaglio ha una barra di spostamento e una barra degli strumenti vuota. Se si visualizzano i registri, si dovrebbe trovare che la barra degli strumenti è nullo. Perchè è questo? Mi manca una sorta di connessione in Interface Builder? La barra di navigazione è il problema per qualche motivo?

A differenza del tutorial su http://www.cimgf.com/2010/05/24/fixing-the-uisplitviewcontroller-template/, vorrei mantenere sia la barra di navigazione che la barra degli strumenti (preferibilmente con la barra degli strumenti in alto quando in verticale e non visibile quando in orizzontale), in modo da avere ancora una funzionalità "Indietro "quando l'iPad è in orientamento verticale.

Qualcuno ha qualche suggerimento per risolvere questo problema? Un esempio di progetto con questo tipo di set up sarebbe l'ideale.

+0

@B Sweigard: Ciao, hai mai risolto il problema? Sto provando a fare quasi esattamente la stessa cosa che hai provato. – matm

risposta

0

Ho trovato che il UISplitViewController incorporato si comporta male quando si cerca di combinarlo con la maggior parte delle altre sottoclassi del controller di visualizzazione incorporato. Il numero MGSplitViewController di Matt Gemmell è molto più flessibile e ha funzionato abbastanza bene per me, nonostante i problemi tecnici (anche se questi sono almeno risolvibili come viene fornito il codice sorgente).

1

È possibile utilizzare un controller di navigazione nella vista di dettaglio di un controller di visualizzazione divisa. In effetti, l'app Impostazioni iPad utilizza questo approccio. Probabilmente il modo migliore per ottenere questa configurazione è creare un nuovo progetto in Xcode 4.xe selezionare il modello "Master-Detail Application". Genererà un controller con vista divisa con 2 controller di navigazione, uno per la vista a sinistra e uno per la vista a destra.

Alla domanda sulla barra degli strumenti, per semplificare le cose, inserisco una barra degli strumenti in basso. Puoi ancora mettere gli elementi del pulsante sulla barra di navigazione in alto, anche se puoi metterli solo a sinistra, a metà o a destra. Se hai bisogno di molti elementi sulla barra in alto, un modo è quello di aggiungere una barra degli strumenti alla vista dei dettagli e nascondere la barra di navigazione nell'evento viewWillAppear della classe di visualizzazione dei dettagli.

Ecco un esempio su come nascondere la barra di navigazione e mostrare la barra degli strumenti:

- (void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.navigationController.toolbarHidden = NO; 
    self.navigationController.navigationBarHidden = YES; 
} 
Problemi correlati