2010-05-09 6 views
12

Ich konnte nirgendwo eine gute Antwort finden. Ich verwende einen UINavigationController für meine iPhone App, wobei alles programmgesteuert generiert wird, nichts in Interface Builder. Ich versuche meine App auf iPad zu portieren, indem ich einen UISplitViewController und meinen vorhandenen UINavigationController verwende, aber ich bin mir nicht sicher, wo ich die Logik meines Programms haben sollte, um die View Controller für iPhone oder iPad zu trennen.Wie erstelle ich eine universelle iPhone/iPad-Anwendung, die programmgesteuert UISplitViewController und UINavigationController verwendet?

Richte ich meine Hauptdatei ein, um einen anderen Anwendungsdelegaten zu verwenden, oder verwende ich den gleichen Anwendungsdelegaten und habe die Benutzeroberfläche bedingt eingerichtet?

Außerdem, wenn ich versuche, meine App auf dem Simulator zu kompilieren, erkennt es nicht den UISplitViewController oder sogar die Bedingung, in der ich überprüfe, ob die Klasse existiert.

Kann bitte jemand mich in die richtige Richtung bringen, daran erinnern, dass ich keine xibs verwende?

Antwort

20

Wenn Sie ein Beispiel für eine vollständig programmatische iPhone/iPad-Schnittstelle sehen möchten, die eine geteilte Ansicht verwendet, können Sie den Quellcode meiner Anwendung herunterladen Molecules.

Innerhalb dieser Anwendung verwende ich einen Anwendungsdelegaten, aber ich richte die Schnittstelle unterschiedlich ein, je nachdem, welches Benutzeroberflächen-Idiom vorhanden ist (iPad oder iPhone). Für das iPhone instanziiere ich einen Root-View-Controller, der die entsprechende Schnittstelle für dieses Gerät verwaltet. Für das iPad erstelle ich zuerst einen UISplitViewController und verbinde ihn mit dem Root-Fenster, erstelle dann meinen iPad-spezifischen Root-View-Controller und platziere ihn als Detailansicht des Split-View-Controllers (mit einem Navigations-Controller, den ich für die Elementauswahl verwende der linke Controller für die Split-Ansicht).

Noch einmal, ich empfehle, dieses Anwendungsprojekt zu betrachten, um zu sehen, wie ich das programmatisch aufstelle. Der Code ist unter einer BSD-Lizenz verfügbar, so dass Sie ihn kopieren und in Ihre eigene Anwendung einfügen können, wenn Sie möchten.

Was die Kompilierungsfehler betrifft, die Sie erhalten, müssen Sie Ihr Anwendungsziel als universelle Anwendung migrieren, indem Sie die Menüoption "Aktuelles Ziel für iPad aktualisieren" verwenden. Sobald dies abgeschlossen ist, legen Sie das Build-SDK auf 3.2 fest. Gehen Sie zu den Build-Einstellungen Ihrer Anwendung und legen Sie ihr Deployment-Ziel auf das früheste Betriebssystem fest, das Sie mit Ihrer Anwendung unterstützen möchten (wobei 3.0 die weiteste Rückseite ist, die Sie verwenden können).

Schließlich müssen Sie UIKit schwach verknüpfen. Wie man das macht, sehe meine Antwort here. Eine schwache Verknüpfung von Frameworks ist nicht mehr erforderlich, wenn Sie das iOS 4.2 oder höher SDK verwenden. Prüfen Sie einfach zur Laufzeit, ob die entsprechenden Klassen vorhanden sind, indem Sie sehen, ob die +class-Methode nil zurückgibt.

+0

Vielen Dank, Moleküle Quellcode hat mir wirklich geholfen, die ganze Sache zu verstehen. Ich benutze die Seitenansicht der Split-Ansicht für meine Tabellenansicht, die meine vorhandene Tabellenansicht mit der iPhone-App teilt und die Detailansicht der Splitview besteht nun aus zwei anderen Ansichten und wird verwendet, um von Navigation Controller zugänglich zu sein. BTW, ich liebe es, Pi gewürfelt auf ipad zu sehen. –

+0

Ich habe auch [[UIApplication sharedApplication] .delegate performSelector: @selector (PushMyViewController)]; , um einen ViewController auf meiner rechten Seite zu schieben .. ist es gut oder schlecht? Ich bin besorgt, etwas Schreckliches könnte später passieren lol –

+0

Danke für die Bereitstellung der Moleküle Quelle! Wenn ich mit Active SDK = Simulator 3.2 baue, kann ich den iPad-Simulator ausführen. Aber wie kann man diese App mit Simulator im iPhone-Modus testen? Wenn ich versuche, Active SDK = Simulator 3.1.3 zu setzen, erhalte ich mehrere Kompilierungsfehler (z. B. kann die Protokolldeklaration von UISplitViewControllerDelegate nicht gefunden werden).Was mache ich falsch? Vielen Dank! –

Verwandte Themen