2011-11-06 14 views
9

Ho appena iniziato a giocare con UISplitViewController - ho messo insieme un po 'di codice da vari tutorial, ma ho difficoltà a vedere come inviare dati dal master al dettaglio. Sto creando un lettore RSS solo per illustrare a me stesso come dovrebbe funzionare. Ho analizzato un feed RSS e popolato MasterViewController con un UITableView, ma sono bloccato a capire come fare clic su una riga e caricare l'articolo corrispondente in un UIWebView nel detailViewController. Qualsiasi consiglio è apprezzato.UISplitViewController Comunicazione master/dettagli

risposta

10

Un buon approccio è quello di utilizzare i delegati. Ciò consente a una vista di chiamare un callback fornito dall'altro. In questo caso, la vista di dettaglio si basa sul master esistente, quindi avere la callback va bene. Eviterei di lasciare che abbiano riferimenti diretti tra loro e leggendo direttamente gli altri dati.

What exactly does delegate do in xcode ios project?

Ecco un tutorial con UISplitViewController che fa proprio questo (delegato tra master/dettaglio):

http://www.raywenderlich.com/1040/ipad-for-iphone-developers-101-uisplitview-tutorial

In particolare questa sezione:

Hooking Up The Sinistra Con la destra

Tempo di giocare il sensale e agganciare i due lati insieme.

Esistono molte strategie diverse per il modo in cui esegue questa operazione. Nel modello di applicazione di visualizzazione divisa, forniscono al controller di visualizzazione sinistro un puntatore al controller di visualizzazione destro, e il controller di visualizzazione di sinistra imposta una proprietà sul controller di vista destra quando viene selezionata una riga. Il controller di visualizzazione destro sostituisce la proprietà per aggiornare la vista quando la proprietà è aggiornata a . Funziona bene, ma seguiremo l'approccio suggerito nel riferimento alla classe UISplitViewController qui - usa i delegati . L'idea di base è definire un protocollo con un metodo singolo - "selectedBotChanged". Il nostro lato destro sarà implementare questo metodo e la nostra parte sinistra accetterà un delegato di qualcuno che vuole sapere di questo .

Un altro approccio sarebbe quello di avere un modello condiviso - come una sorta di Singleton con le notifiche per attivare diversi punti di vista per aggiornare se stessi sulla base di entrambi i dati della notifica o l'esecuzione di query del modello in reazione ad un modello cambia. Questo è a volte migliore in un'app con molte viste che non si basano l'una sull'altra e che semplicemente ingigantiscono i dati in vari modi (il che non è il caso qui - la vista di dettaglio si basa sul master esistente, quindi un delegato va bene).

+0

Ho appena risposto in dettaglio in questa domanda. http://stackoverflow.com/questions/33721081/swift-how-to-detect-if-uisplitviewcontroller-is-currently-showing-1-or-2-contro/38547858#38547858 –