2010-11-07 5 views
4

Dans Xcode, j'utilise des cibles pour lancer plusieurs versions d'applications qui partagent un code de base et ont tendance à avoir des graphismes différents.Interface Builder: Choisir les médias en fonction de la cible

par exemple. Prétendant que j'ai la cible JOHN et la cible DOE. Je pourrais ajouter différentes images nommées exactement example.png à l'ensemble, et avoir chacune ciblée respectivement. Le code n'a pas besoin de modifications de cette façon.

UIImageView *image = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"example.png"]]; 

Si au lieu que j'ai appelé chaque image par version différente, je finirais avec quelque chose de semblable à ceci:

NSString *imageName; 

#ifdef JOHN 
imageName = @"johnExample.png"; 
#else 
imageName = @"doeExample.png"; 
#endif 
UIImageView *image = [UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]]; 

Avoir plusieurs versions et de nombreuses images ce rapidement devient désordonné et ayant un énorme fichier avec des constantes ressemble à une surcharge, donc je me retrouve avec la première option.

Le problème est:

Tout en travaillant sur des fichiers Nibs, Interface Builder apparaît juste pour charger example.png au hasard. Donc, si je travaille sur la cible JOHN c'est un désagrément que IB a juste décidé de charger example.png de la cible DOE.

Interface Builder peut-il charger un média en fonction d'une cible?

Répondre

1

Juste pour fermer cette question, la réponse est: no. Depuis janvier 2011, vous ne pouvez pas charger de support basé sur une cible dans Interface Builder, mais vous pouvez utiliser certaines solutions de contournement, comme Digital Robot et ma propre description dans la question.

0

pourquoi pas cette définition au début du code

#ifdef JOHN 
#define APP @"john" 
#elseif DOE 
#define APP @"doe" 
#endif 

puis, chaque fois que vous voulez utiliser, vous pouvez avoir ...

imagename = [NSString stringWithFormat:@"%@Example.png", APP]; 
+0

J'essayais d'éviter quelque chose comme ça, mais merci quand même. – pablasso

0

Cela devrait fonctionner. Cela peut être nouveau parce que le temps a passé et je viens d'apprendre cela récemment. Je ne sais pas si c'était possible il y a des années quand vous avez posé cette question avec acuité :) Mais cela peut être utile pour les autres qui cherchent une solution.

Lors de l'ajout d'une cible à un projet dans xcode, il crée un sous-dossier dans le système de fichiers. Il y a un sous-dossier pour chacun des taragts. L'idée de base est, si je comprends bien, que tous les fichiers couramment utilisés sont au niveau supérieur dans le répertoire principal du projet et ceux qui sont individuels à chaque cible sont dans leur répertoire respectif.

(Un peu comme les versions localisées de fichiers.)

Ainsi, vous pouvez mettre l'image de John comme dans example.png/projet/john et l'image de Doe comme dans example.png/projet/DOE. Vous devez vérifier que les versions correctes de chaque image sont incluses dans les paramètres de construction de chacune des cibles, respectivement. (Copie des ressources de Boundle) Cette opération est "example.png" incluse une seule fois dans le cadre. Le chargement aléatoire d'une image ou de l'autre ne devrait plus se produire, même si vous l'appelez "example.jpg" dans votre code.

Questions connexes