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.
Inoltre, UIViewControllers dovrebbe mai essere utilizzato senza un file pennino/xib (ad esempio, un UIView creato nel codice)? – titaniumdecoy
Personalmente, uso raramente file NIB, quindi sì, puoi usare UIViewController e gli amici senza di loro. – Alex
Il fatto che -initWithNibName: bundle: è l'inizializzatore designato di UIViewController sembra indicare che non è destinato a essere utilizzato senza un pennino. – titaniumdecoy