6

Recentemente ho scoperto che UIView deve avere solo UIViewController s quando riempiono l'intera finestra (o sono gestiti da un altro UIViewController come UINavigationController o UISplitViewController). Questa citazione proviene dalla documentazione per UIViewController:La logica di visualizzazione dovrebbe andare in un UIView o (quando applicabile) il suo UIViewController?

Non utilizzare i controller di visualizzazione per gestire le viste che riempiono solo una parte della loro finestra, ovvero solo una parte dell'area definita dal rettangolo del contenuto dell'applicazione. Se si desidera avere un'interfaccia composta da diverse viste più piccole, incorporarle tutte in un'unica vista radice e gestirla con il proprio controller di visualizzazione.

Solitamente inserisco la logica della vista in UIView anche quando è gestita da un UIViewController, tuttavia spesso mi trovo a dover accedere alle proprietà di UIViewController come la proprietà navigationController. Tuttavia, non è previsto che UIViews sia a conoscenza del proprio UIViewController.

La mia conclusione è che la logica di visualizzazione dovrebbe andare in un UIViewController di UIView quando ne esiste uno, e nello stesso UIView.

In alternativa, è consigliabile creare una classe controller per una vista che è non una sottoclasse di UIViewController? UIPopoverController (una sottoclasse NSObject) sembra seguire questo modello, sebbene nella maggior parte dei casi (UIButton, ecc.) Le viste non sembrano avere classi di controller dedicate.

+0

Inoltre, UIViewControllers dovrebbe mai essere utilizzato senza un file pennino/xib (ad esempio, un UIView creato nel codice)? – titaniumdecoy

+0

Personalmente, uso raramente file NIB, quindi sì, puoi usare UIViewController e gli amici senza di loro. – Alex

+0

Il fatto che -initWithNibName: bundle: è l'inizializzatore designato di UIViewController sembra indicare che non è destinato a essere utilizzato senza un pennino. – titaniumdecoy

risposta

3

La logica dell'applicazione non deve mai entrare in un UIView. Periodo. Lo scopo di un UIViewController è di gestire una vista e le sue sottoview e, nella maggior parte dei casi, è il posto appropriato per la logica. UIKit aderisce al paradigma Model-View-Controller. I modelli contengono i dati, le visualizzazioni li visualizzano e accettano l'input e i controller gestiscono l'interazione tra gli altri due livelli. Ecco perché il controller è il posto logico per la logica dell'applicazione. In iOS, UIViewController e le sue sottoclassi sono le solite classi di controller. Suggerirei reading up on Apple's guidance per capire meglio questo modello e come viene utilizzato in iOS.

La citazione dalla documentazione di Apple indica che non si crea uno UIViewController per ogni etichetta o pulsante. Ne crei uno per ogni "pagina" o "schermata" della tua applicazione e lo usi per gestire i controlli in quella vista. Si noti che UIKit dispone di classi per gestire visualizzazioni di tabelle, visualizzazioni di schede e viste di navigazione. Questo è il livello di oggetto che useresti per gestire UIViewController.

Si consiglia di sfogliare gli esempi iOS inclusi con l'SDK. Dovrebbero darti una buona idea di come il framework si aspetta che le applicazioni siano strutturate.

+0

Che dire di un UISwitch (o di qualsiasi altro controllo)? È una sottoclasse UIView che gestisce il proprio stato. – titaniumdecoy

+0

Gestire il proprio stato non è ciò che intendo per logica. Intendo logica applicativa, come decidere di mostrare una finestra di dialogo all'utente o di salvare un file. Un 'UISwitch' dovrebbe sapere se è acceso o spento, ma non dovrebbe essere responsabile di salvare il suo valore nel file delle preferenze dell'utente, per esempio. Questo è il lavoro di un controller di visualizzazione. – Alex

3

Sono venuto dal mondo di GUI Swing di Win32 + .NET + Java e facevo la stessa cosa. Ma poi ho risolto i miei modi cattivi. Ora l'unica volta che inserisco il codice in UIView è se desidero personalizzare il VIEW STESSO (disegno OpenGL, ad esempio).

I controllori impostano lo stato della vista. La vista rende il suo stato.

Problemi correlati