2009-04-02 32 views
5

Come qualcuno che è abbastanza nuovo per lo sviluppo di iPhone, ho cercato di trovare buoni modelli di progettazione per la gestione di più sottoview, in particolare dove le sottoview richiedono lo stesso tipo di metodi delegati da definire.Qual è il modo migliore per organizzare più sottoview?

Ad esempio, ho una vista in cui ho bisogno di scambiare tra 2 UITableViews in base alle azioni dell'utente. Sia UITableViews che un oggetto UITableViewControllerDelegate definito per popolare le righe, ecc.

Gli sviluppatori di iPhone più esperti trovano che sovraccaricare il controller di visualizzazione principale come delegato per entrambe le visualizzazioni secondarie è il modo giusto di fare le cose? Attualmente ho 2 oggetti definiti che ognuno agisce come delegato per ogni UITableView per cercare di mantenere le cose più organizzate. Realizza ciò di cui ho bisogno, ma è un buon modello da seguire?

Suppongo che ci siano alcune buone pratiche là fuori per evitare varie insidie ​​con la gestione della memoria e cose divertenti come quella. Grazie in anticipo!

risposta

5

È possibile utilizzare le viste come contenitori per contenere gli elementi come tabelle. Quindi, nel caso delineate, avreste una vista contenitore e scambiate UITableViews dentro e fuori di esso ...

Un buon approccio sarebbe avere controller di vista separati per ogni tabella. Altrimenti diventa troppo complicato cercare di tenere traccia del set di dati che si sta supportando tra i vari metodi di delega della vista tabella e rende più difficile eseguire molte personalizzazioni su una tabella che potrebbe non essere applicabile a un'altra.

La cosa principale da tenere presente quando si utilizzano i controller compositi di visualizzazione è "self.navigationController" e le chiamate correlate non restituiranno nulla (poiché non sono realmente figli del controller di navigazione) quindi è necessario passare tale riferimento o altrimenti gestirlo in modo alquanto diverso nei controller della vista tabella.

1

Ecco come gestirei la situazione da solo. Un controller e delegato per UITableView. L'origine dati può essere riutilizzata, se ciò ha senso (cioè gli stessi dati vengono visualizzati in entrambe le UITableViews) Altrimenti ci sarebbero molti ifs nei metodi dei delegati, controllando quale tabella visualizza il messaggio.

Cambiare UITableViews mi sembra un lavoro per UINavigationController. Di solito sull'iPhone non si riorganizzano i controlli. È possibile creare schermate complete (in codice o come .nib tramite InterfaceBuilder), passando da esse utilizzando UINavigationController o UITabBar.

2

Se c'era solo una piccola differenza tra i due, ad esempio, se le celle di una tabella sono disposte allo stesso modo ma usano dati leggermente diversi, potrei usare se le istruzioni, ma altrimenti andrei con oggetti di delegato separati di qualche tipo. La separazione delle preoccupazioni è la chiave qui: se stai scrivendo un metodo che fa due cose molto diverse, questo è un segno che il tuo codice non è organizzato abbastanza bene da essere leggibile, mantenibile o flessibile.

Inoltre, non dimenticare che i controller di visualizzazione non hanno oggetti magici che è possibile utilizzare solo con la barra delle linguette approvata da Apple ei controller di navigazione. È perfettamente legittimo scrivere il proprio "controller di visualizzazione a commutazione" che accetta due controller di visualizzazione e commuta tra di essi. Dovrai fare dei test, però, per determinare se devi chiamare -viewWillAppear: e il suo ilk manualmente o no - c'è qualche macchinario magico che può o non può farlo per te, a seconda di dove aggiungi il controller della vista nella gerarchia.

Problemi correlati