Vous pouvez utiliser un modificateur de périphérique (c.-à-d. ~ Ipad) pour fournir une clé spécifique au périphérique dans Info.plist et spécifier une image de lancement spécifique au périphérique (Default.png pour iPhone et Default ~ ipad.png pour iPad). Exemple). Ces deux éléments sont spécifiquement mentionnés dans Apple Docs , mais ils ne disent pas que cela fonctionnera pour tout autre type de fichier.
J’ai découvert (par accident) que cela fonctionne pour charger des fichiers initWithNibName:bundle:
via initWithNibName:bundle:
Donc, par exemple, je peux avoir MyView.xib et MyView ~ ipad.xib, et ce code:
MyViewController *viewController = [[MyViewController alloc] initWithNibName:@"MyView" bundle:nil];
… chargera totalement MyView ~ ipad.xib sur un iPad et MyView.xib sur d’autres appareils.
Donc, 1) Est-ce documenté quelque part? Je ne pouvais certainement pas trouver de docs Apple. C’est certainement plus pratique que de vérifier UI_USER_INTERFACE_IDIOM () et de coder en dur deux noms de point différents, mais je ne crois pas que cela soit documenté.
Et, 2) Est-ce que quelqu’un sait quelle version d’iOS a commencé à fonctionner? Je l’ai seulement essayé en 4.2, et ça marche là-bas. Les modificateurs de périphérique en général (même pour les éléments répertoriés ci-dessus) sont au minimum 4.0.
En fait, il est explicitement défini dans les documents, mais en tant que note de bas de page.
CocoaNibs
Dans la note au bas de “Chargement de fichiers NIB à l’aide de NSBundle”:
Remarque: Si vous développez une application universelle pour iOS, vous pouvez utiliser les conventions de dénomination spécifiques au périphérique pour charger automatiquement le fichier nib approprié pour le périphérique sous-jacent. Pour plus d’informations sur la façon de nommer vos fichiers nib, voir «iOS prend en charge les ressources spécifiques à l’appareil».
Quels liens vers Cocoa Conceptual LoadingResources
Cependant, oui, il s’agit d’une fonctionnalité 4.0+ uniquement.
J’ai eu le même problème. La réponse n’avait pas de sens au début, mais la bonne nouvelle est que c’est facile à faire! 🙂
Il vous suffit de nommer vos iPad xibs sans modificateur et vos xibs iPhone avec le modificateur ~ iphone et il les sélectionnera correctement.
Donc, avec MyViewController, vous aurez MyViewController.xib
pour iPad et MyViewController~iphone.xib
pour iPhone. Ensuite, vous pouvez simplement lancer votre contrôleur de vue avec simple alloc / init.
[[MyViewController alloc] init]
et il va saisir le bon xib.
Donc, quand je crée un nouveau contrôleur de vue dans XCode, je choisis toujours la case pour le formater pour ipad, parce que le xib qu’il créera sera nommé MyViewController.xib et que vous voulez que celui-ci soit de la taille de l’iPad. Ensuite, je crée un deuxième xib, formaté pour iPhone et nommez-le avec le modificateur ~ iphone.
La documentation est parfois un peu contradictoire, mais cette page explique comment les ressources avec un identifiant seront par défaut iPad.
ImageSoundResources
Vérifiez la section sur l’utilisation d’images haute résolution. Je sais que nous parlons de xibs et non d’images, mais cela fonctionne. Mes 6 dernières applications ont toutes utilisé cet idiome.
Je déteste être ce gars et répondre à ma propre question, mais je pense que la réponse est:
1) Non, pas explicitement documenté dans la documentation Apple, et
2) 4.0 et supérieur (basé sur mes propres tests)
Tout ce que vous enregistrez est un couple de lignes de vérification de code pour UI_USER_INTERACE_IDIOM (). Je vais quand même le prendre. Moins de code est moins de code.
La technique appropriée à utiliser dans iOS 3.2 et UI_USER_INTERFACE_IDIOM()
ultérieures est la fonction UI_USER_INTERFACE_IDIOM()
. J’utilise généralement un opérateur ternaire pour UIViewController
avec le XIB approprié.
UIViewController* controller = [[UIViewController alloc] initWithNibName:UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? @"YourViewController-iPad" : @"YourViewController" andBundle:nil];