56 votes

Quand utiliser UIView ou UIViewController sur l'iPhone?

J'ai toujours sorte de me demandais quand utiliser une UIView contre un UIViewController sur l'iPhone.

Je comprends que vous ne devriez pas utiliser un UIViewController sauf si c'est un affichage en plein écran, mais ce que d'autres lignes directrices sont là?

Par exemple, je veux créer une superposition modale - un écran qui permettra de glisser en place sur l'écran actuel. Si cette superposition modale est affichée en plein écran, il faut un UIViewController? La dernière fois que j'ai construit quelque chose de ce genre, je sous-classé UIViewController, mais maintenant, je me demande si c'était correct.

39voto

dxgriffiths Points 585

Je recommande fortement la lecture de Apple UIViewController Guide de Programmation.

La principale raison pratique d'utiliser un UIViewController, en particulier dans une application simple qui n'a pas l'usage de la navigation, est à la rotation de la poignée. UIWindow et UIViewController travailler ensemble pour déterminer si oui ou non le haut de la vue peut la rotation de la poignée, et les orientations qu'il prend en charge.

Si vous venez d'utiliser une vue, sans avoir ce point de vue, géré par une sous-classe UIViewController, puis la fenêtre de l'application ne serait pas envisager de ce point de vue un candidat pour la rotation. UIViewController est l'ingrédient magique qui fait de l'auto-rotation possible.

Rappelez-vous que tous les contrôles de l'INTERFACE utilisateur et même la fenêtre principale elle-même, tous les "points de vue", c'est à dire qu'ils sont des sous-classes de UIView. Donc, vous êtes à l'aide de vues de tous les temps. L'idée derrière un point de vue est surtout qu'il prend la responsabilité de l'élaboration d'une partie de l'écran, alors, évidemment, l'écran peut contenir de nombreux points de vue différents en même temps, et les vues peuvent contenir d'autres points de vue (de la même manière la fenêtre principale, d'être vue elle-même).

La raison pour Apple recommande d'avoir un UIViewController gérer toute une page de l'espace est à cause de la rotation du système. Un seul UIVC -- celui attaché à la plus récente, la plus haute ajouté sous-vue de la fenêtre, ou d'un modal pop-up, ne sera jamais demandé de vérifier si les changements d'orientation sont possibles. Et que le point de vue associé avec un UIVC sera effectivement mis en rotation. C'est un point important à retenir... Si vous avez deux UIVC objets à gérer le contenu de l'écran, puis seulement la plus récente pourrait changer d'orientation, qui risque de laisser l'affichage dans un désordre.

Alors, en un mot, si vous disposez d'une simple fenêtre d'application basée et n'ont pas besoin de s'inquiéter à propos de la rotation, il est bien d'utiliser vos contrôles réguliers placé directement sur la fenêtre principale et d'ignorer UIViewController tout à fait. Vous aurez toujours besoin de fournir un générique de "contrôleur" pour gérer les modifications de mise en page et le comportement, et la médiation des modifications de données entre les contrôles et votre modèle(s), mais que le contrôleur n'a pas besoin d'hériter de UIViewController, il peut être une sous-classe de NSObject.

11voto

Brad The App Guy Points 13329

C'est une grande question.

Ma règle de base. Est que toutes les grandes "page" d'une application obtient son propre point de vue contrôleur. Ce que je veux dire par là c'est que, au fil de cadrage de l'étape de la conception de l'application, tout ce qui existe en tant qu'entité propre finira par être géré par son propre point de Vue Contrôleur. Si il y a un écran modal qui se glisse par rapport à un écran, je vais considérer qu'à un 'page' et lui donner son propre point de vue contrôleur. Si il ya une vue que les superpositions et page existante (comme un écran de chargement ou de l'aide contextuelle.) Je voudrais traiter ceux différemment, de les mettre en œuvre, UIView sous-classes et de garder la logique que les "pages" - vue-contrôleur. Il le popup a un comportement je vais communiquer pour que les pages-Vue-Contrôleur à l'aide du modèle de délégué.

J'espère que cette aide. C'est très philosophique et architectural question et beaucoup peut être écrit à ce sujet.

4voto

Art Gillespie Points 6139

J'utilise UIViewController chaque fois qu'une vue est en plein écran et comporte des sorties / actions et / ou des sous-vues.

2voto

Amagrammer Points 5064

J'ai une approche quelque peu différente:

Remplacez UIView si vous prévoyez de réaliser un dessin personnalisé dans drawRect. Sinon, utilisez la sous-classe UIViewController et utilisez [self.view addSubview: blah] pour ajouter les composants de la page.

Il existe quelques autres cas particuliers, mais cela gère environ 95% des situations.

(Vous aurez toujours souvent besoin d'un UIViewController avec un UIView personnalisé. Mais il est commun d'avoir un UIViewController personnalisé sans UIView personnalisé correspondant.)

0voto

marcc Points 8513

Est-ce que la chose qui glisse dans un écran autonome? Je veux dire, interagit-il directement avec le parent? Si oui, faites-en un UIView , sinon, recommandez probablement un UIViewController .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X