2010-11-10 9 views
1

J'ai une application iPhone qui trouve des cafés à proximité, puis affiche les détails (adresse, heures d'ouverture, disponibilité WiFi) dans un ShopViewController. J'ai créé plusieurs autres cibles dans le projet (par exemple un supermarché, un restaurant) et chacune a des informations légèrement différentes à afficher dans le ShopViewController. Au supermarché, je veux afficher si l'alcool est à vendre. Au restaurant, je veux afficher les heures de la dernière commande, et ainsi de suite.Comment créer une NIB distincte pour chaque cible?

Ma solution actuelle n'est pas facile à maintenir. J'ai un seul NIB partagé, avec beaucoup de UILabel s pour chaque éventualité. Même si les coffee shops n'ont pas d'informations "dernier ordre", j'utilise le même NIB avec une "dernière commande" UILabel. Toutes mes cibles utilisent une étiquette "title", mais une seule utilise l'étiquette "alcohol". Je n'utilise que des étiquettes dans la (les) cible (s) où elles sont nécessaires. Les UILabel s sont tous mis en place avec une chaîne vide, et quand j'étale la vue, j'ignore les étiquettes vides. Mais avec 4 cibles, il devient difficile de garder une trace.

Mon ShopViewController a des fonctionnalités partagées, donc je devine que je devrais créer des sous-classes, comme CoffeeShopViewController, qui héritent de ShopViewController. Ensuite, j'utiliser un #ifdef pour charger le NIB correct pour la cible actuelle. Ensuite, je ne pouvais inclure la sous-classe pertinente dans chaque cible.

Est-ce la meilleure solution, ou existe-t-il une meilleure façon de gérer cela?

Répondre

0

Si vous avez une sous-classe pour chacune de vos différentes interfaces, vous pouvez demander à chaque sous-classe de charger la plume exacte voulue, en évitant les instructions #if pre compiler. Mais je pense que cela sera en fait plus simple à long terme si vous gardez la seule plume qui est utilisée par chaque sous-classe de contrôleur de vue, et gardez simplement le code de personnalisation spécifique à la cible dans ces sous-classes. Créer un tas de plumes ne vous sera utile que si la personnalisation que vous avez à faire à la plume est vraiment étendue.

Questions connexes