iOS: Utilisation de l'appareil modificateurs pour le chargement des fichiers xib?
Vous pouvez utiliser un appareil modificateur (c'est à dire, ~ipad) afin de fournir un dispositif-clé spécifique dans Info.plist, et pour spécifier un périphérique spécifique lancement de l'image (par Défaut.le format png pour iPhone, et par Défaut~ipad.le format png pour iPad, par exemple). Ces deux choses sont spécifiquement mentionnés dans Apple Docs, mais ils ne disent pas que cela fonctionnera pour tout autres types de fichiers.
J'ai découvert (par hasard) que cela fonctionne pour le chargement .xib fichiers via initWithNibName:bundle:
. Ainsi, par exemple, je peux avoir Mavue.xib et Mavue~ipad.xib, et ce code:
MyViewController *viewController = [[MyViewController alloc]
initWithNibName:@"MyView" bundle:nil];
... totalement la charge de Mavue~ipad.xib sur un iPad, et Mavue.xib sur d'autres appareils.
Donc, 1) Est-ce documenté quelque part? Je ne pouvais pas trouver n'importe quel Apple docs. C'est sûr que plus maniable que la vérification de UI_USER_INTERFACE_IDIOM() et de coder en dur les deux différents noms de plume partout, mais j'ai un peu de ne pas lui faire confiance si elle n'est pas documenté.
Et, 2) personne Ne sait quelle est la version de l'iOS cela a commencé à travailler dans? J'ai seulement essayé en 4.2, et ça fonctionne. Appareil modificateurs en général (même pour la documentation de choses énumérées ci-dessus) sont 4.0 minimum.
- Bon spot. Assez sûr c'est de 4.0 à partir de, certainement pour des applications universelles; mais peut-être que cela a fonctionné sur 3.2 sur iPad? En regardant en arrière au bundle guide de programmation, il peut toujours utiliser des images comme des exemples pour le chargement de ressources, mais en lisant entre les lignes, c'est que toutes les ressources chargé par l'app bundle abandon par le même mécanisme?
Vous devez vous connecter pour publier un commentaire.
En fait, il est explicitement définie dans les docs, mais comme une note de bas de page.
CocoaNibs
Dans la note au bas de la "Chargement de la PLUME de fichiers à l'aide NSBundle":
Qui relie Cacao Conceptuel LoadingResources
Cependant, oui, c'est un 4.0+ only.
J'ai eu ce même problème. La réponse n'a pas de sens au premier abord, mais la bonne nouvelle, c'est que c'est facile à faire! 🙂
Juste le nom de votre iPad xibs sans aucun modificateur et votre iPhone xibs avec ~iphone modificateur et il vous sélectionnez correctement.
Donc, avec MyViewController, vous aurez
MyViewController.xib
pour l'iPad etMyViewController~iphone.xib
pour l'iPhone. Ensuite, vous pouvez simplement init votre vue-contrôleur avec de simples alloc/init.[[MyViewController alloc] init]
et il va attraper le droit xib.Donc, quand je crée un nouveau point de vue contrôleur dans XCode, je choisis toujours la boîte de format pour ipad, car le xib il va créer va être nommé MyViewController.xib et vous voulez que l'iPad de taille xib. Puis-je créer un deuxième xib, formaté pour l'iPhone et le nom avec le ~iphone modificateur.
La documentation est un peu contradictoire, à la fois, mais cette page parle de la façon dont les ressources avec un identifiant par défaut à l'iPad.
ImageSoundResources
Voir la section sur l'utilisation de la haute résolution des images. Je sais que nous parlons xibs et pas des images, mais il fonctionne. Mon dernier 6 apps, tous ont utilisé cet idiome.
Je déteste être que guy et de répondre à ma propre question, mais je pense que la réponse est:
1) Nan, pas explicitement documentées dans toute la documentation d'Apple, et
2) 4.0 et supérieur (il est basé sur mes propres tests)
Tout ce que vous enregistrez est à quelques lignes de code de vérification pour UI_USER_INTERACE_IDIOM(). Encore, je vais le prendre. Moins de code est moins de code.
La technique appropriée pour une utilisation dans iOS 3.2 et plus tard est le
UI_USER_INTERFACE_IDIOM()
fonction. Je l'utilise généralement un opérateur ternaire à init de laUIViewController
avec le XIB.