Peut-être que c'est une question idiote, mais je me suis heurté à un certain nombre de fois au développement de l'IOS. P>
Parfois, je vais développer une composante de vue que je souhaite utiliser sur plusieurs écrans, donc je déciderai de la sous-classe Alors, je commence à ajouter de la fonctionnalité. Peut-être qu'il doit répondre à un À un certain point, je commence à me demander si je devrais vraiment faire une sous-classe code> uiviewcontroller Code> et l'ajoutez à mon UI en tant que visiteuse enfant. p>
Y a-t-il un consensus sur l'endroit où dessiner la ligne entre ajouter des comportements à un uiview code> et de le faire quelque chose que je peux utiliser dans plusieurs endroits. P>
nsnotification code> ou est censé répondre aux touches utilisateur. P>
uiview code>, et quand créer un
complet uiviewcontroller code>? p>
3 Réponses :
J'ai utilisé les contrôleurs de vue intégrés pour charger des vues de table réutilisables de temps en temps. J'ai trouvé que c'était utile parfois mais pas toujours. La communication entre les deux peut être encombrante, comme si vous souhaitez que le contrôleur intégré communiquera vers le conteneur. La délégation le rend plus facile mais toujours encombrant. Il vous limite également à iOS 6, si je me souviens de la bonne iOS 5 et de la baisse, ne prenez pas de soutien aux contrôleurs intégrés. P>
S'il s'agit simplement d'ajouter des méthodes, vous pouvez utiliser une catégorie pour stocker certaines méthodes supplémentaires. Je fais beaucoup de choses sur NsmanageDObjects que je ne veux pas sous-classe et si je régénère le NsmanagedObject du Datamodel, je ne perds pas le code dans mes catégories. Me donne des fonctionnalités ajoutées comme des champs calculés ou des méthodes de conversion sans avoir à la sous-classement. Si vous n'avez pas besoin de ces méthodes d'instance particulière, excluez simplement la référence à la catégorie. P>
La sous-classement n'est jamais mauvaise si IMO. P>
Vous devez utiliser un contrôleur à tout moment que vous devez manipuler ou contrôler les données. Les points de vue sont censés être aussi stupides que possible, ne sachant pas ce qu'ils affichent, mais plutôt où. Vous pouvez facilement sous-classer et réutiliser les fichiers de vue. Un bon exemple, disons que vous devez récupérer une chaîne (ou un texte) de l'utilisateur dans votre application via un contrôleur Popover et un modal. Créez une sous-classe générique de de mon expérience I Sous-classe uiviewcontroller code> qui a une vue avec un champ de texte et un bouton. Vous pouvez ensuite utiliser cette vue et son contrôleur dans n'importe quelle capacité dont vous avez besoin. La réutilisant dans la popover, modale ou nulle part ailleurs (et transmettre généralement les données à travers la délégation). Depuis que vous avez affaire à des données, vous ne devez pas utiliser une sous-classe unique d'UIView. p>
UIViewControls code> Plus souvent, alors
uIViews code>. C'est un peu difficile pour moi de comprendre si vous parlez exclusivement de conteneurs ou de réutilisation de vues dans le flux de travail d'application général. De toute façon si cela devrait être le même. P>
Beau. Cela a toujours été mon inclination aussi.
L'affaire qui m'a incité à poster ceci était en fait pour quelque chose qui ne sera pas réutilisé. C'est très spécifique à un écran spécifique. Cependant, le composant a beaucoup de plomberie, et cela ressentait vraiment comme s'il avait besoin d'une meilleure séparation de la vue Contentroller est inclus dans.
Oui, je sais ce que vous voulez dire. La sous-classement Un UIViewController pour une situation spécifique n'est pas une mauvaise idée, mais essayez de les rendre aussi génériques que possible. Comme dans mon exemple, ne le nommez pas colornamecollector code> ou quelque chose parce qu'il ne peut être utilisé que pour obtenir des couleurs. Nommez plutôt quelque chose comme
stringcollector code>. De cette façon, il est plus générique et peut être utilisé chaque fois que vous avez besoin d'obtenir une chaîne de l'utilisateur, quel que soit le lieu ou la manière dont il est présenté / utilisé.
Je ne peux pas vous parler du consensus, mais voici mon avis: P>
Sous-classe Sous-classe Un indicateur que le sous-classement uIView code> uniquement lorsque ... p>
UIView déjà existant code> Sous-classe LI>
uiviewcontroller code>, cependant. Li>
UIViewController code> dans tous les autres cas. Vous avez presque toujours besoin d'un contrôleur de toute façon, pour écrire du code de colle qui lie des vues et des modèles, ou pour la gestion des interactions utilisateur. Par conséquent, Apple a permis à Uikit de laisser les contrôleurs faire tout le travail et de garder des vues aussi "stupides" que possible. Par exemple, il est très simple de nier les contrôleurs pour créer des hiérarchies de vue complexes, sans qu'il soit nécessaire de disposer d'une sous-classe de visualisation unique. P>
uiview code> n'est pas la première chose à faire est la section intitulée "Alternatives au sous-classement" dans le référence de classe UIView . Un indicateur que le sous-classement
uiviewcontroller code> est la chose préférée à faire est qu'il n'y a pas de cette section de ce type dans le Référence de la classe UIViewController : -) p>
@Herzbube Pensez-vous que c'est pourquoi nous avons maintenant une vue sur le conteneur avec des VC enfants dans IB? Est-ce la voie à suivre pour partager des parties de notre UI entre les scènes (comme une image de profil + Nom + Status Dot)?
@Allaire Les commentaires ne sont pas vraiment utiles pour les discussions, et ils ne sont pas destinés à être ainsi. Vous pourriez peut-être commencer cette discussion dans une chaîne de discussion pour obtenir une opinion. Cela étant dit, j'avoue que 1) Je n'ai jamais utilisé l'IB beaucoup; 2) J'ai été plutôt déconnecté du développement iOS depuis plusieurs mois maintenant, donc je ne sais pas vraiment ce que l'IB donne à Devs ces jours-ci et comment Apple pense qu'il devrait être utilisé. Peut-être regarder une vidéo technique ou deux?