2010-05-09 8 views
12

Je n'ai pas trouvé de bonne réponse nulle part. J'utilise un UINavigationController pour mon application iPhone, avec tout ce qui est généré par programme, rien dans Interface Builder. J'essaye de porter mon application sur iPad, en utilisant un UISplitViewController et mon UINavigationController existant, mais je ne suis pas sûr d'où je devrais avoir la logique de mon programme séparant les contrôleurs de vue pour iPhone ou iPad. Est-ce que je configure mon fichier principal pour utiliser un autre délégué de l'application ou est-ce que j'utilise le même délégué de l'application et que l'interface utilisateur est paramétrée de manière conditionnelle? En outre, chaque fois que j'essaie de compiler mon application sur le simulateur, elle ne reconnaît pas UISplitViewController ou même la condition dans laquelle je vérifie si la classe existe.Comment créer une application iPhone/iPad universelle qui utilise UISplitViewController et UINavigationController par programme?

Pouvez-vous s'il vous plaît quelqu'un me mettre dans la bonne direction, en me rappelant que je n'utilise pas de xibs?

Répondre

20

Si vous voulez voir un exemple d'une interface iPhone/iPad complètement programmatique qui utilise une vue partagée, vous pouvez télécharger le code source de mon application Molecules.

Dans cette application, j'utilise un délégué d'application, mais je configure l'interface différemment selon l'idiome de l'interface utilisateur présent (iPad ou iPhone). Pour l'iPhone, j'instancie un contrôleur de vue racine qui gère l'interface appropriée pour ce périphérique. Pour l'iPad, je crée d'abord un UISplitViewController et le rattache à la fenêtre racine, puis crée mon contrôleur racine spécifique à l'iPad et le place comme vue détaillée du contrôleur de vue partagée (avec un contrôleur de navigation que j'utilise pour la sélection des éléments le contrôleur de gauche pour la vue éclatée).

Encore une fois, je recommande de regarder ce projet d'application pour voir comment je l'ai mis en place par programmation. Le code est disponible sous une licence BSD, donc vous pouvez copier et coller ceci dans votre propre application si vous le souhaitez.

En ce qui concerne les erreurs de compilation, vous devez migrer votre cible d'application pour qu'elle devienne une application universelle à l'aide de l'option de menu "Mettre à niveau la cible actuelle pour l'iPad". Une fois cela terminé, définissez votre build SDK à 3.2. Accédez aux paramètres de génération de votre application et définissez sa cible de déploiement sur le premier système d'exploitation que vous souhaitez prendre en charge avec votre application (3.0 étant le plus éloigné possible).

Enfin, vous aurez besoin de lier UIKit. Pour savoir comment faire, voir ma réponse here. La liaison faible des frameworks n'est plus nécessaire si vous construisez en utilisant le SDK iOS 4.2 ou ultérieur. Vérifiez simplement la présence des classes appropriées à l'exécution en vérifiant si leur méthode +class renvoie nil.

+0

Merci beaucoup, le code source des molécules m'a vraiment aidé à comprendre le tout. J'utilise la vue de côté de la vue partagée pour ma vue de table qui partage ma vue de table existante de l'application iphone et la vue détaillée de la splitview est maintenant composée de deux autres vues et sont utilisées pour être accessible par navigationcontroller. btw, j'aime voir pi cubed sur ipad. –

+0

J'ai également utilisé [[UIApplication sharedApplication] .delegate performSelector: @selector (PushMyViewController)]; pour pousser un ViewController sur ma droite ... est-ce bon ou mauvais? je suis inquiet quelque chose d'horrible pourrait arriver plus tard lol –

+0

Merci de fournir la source Molecules! Lorsque je compile avec Active SDK = Simulator 3.2, je peux lancer le simulateur d'iPad. Mais comment peut-on tester cette application avec un simulateur en mode iPhone? Lorsque j'essaie de définir Active SDK = Simulator 3.1.3, j'obtiens plusieurs erreurs de compilation (par exemple, je ne trouve pas la déclaration de protocole UISplitViewControllerDelegate).Qu'est-ce que je fais mal? Merci! –