2012-04-03 5 views
3

Ich habe eine BOOL namens isUsingiPad eingerichtet, um zu erkennen, wenn mein Benutzer ein iPad verwendet. Früher habe ich dies so tun:Erstellen einer iPad Nib laden in einer universellen App

UIDevice* userDevice = [UIDevice currentDevice]; 
if (userDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
    isUsingiPad = YES; 
} 

Wenn meine Anwendung zum ersten Mal gestartet wird, überprüft, ob das Gerät verwendet, um durch meine Anmeldung gegangen ist. Wenn dies der Fall ist, sendet es den Benutzer an den Haupt-View-Controller meiner App. Wenn jedoch ein registrierter Benutzer (der ein iPad verwendet) sich registriert, die App schließt und sie dann erneut öffnet, werden sie an die iPhone-Spitze anstatt an das iPad gesendet. Ich habe 2 Nibs für jede Ansicht in meiner App. Eine für iPhone und eine für iPad. Es gibt einen einzigen View Controller, der jeden Satz von 2 steuert. Ich habe den Code bereits implementiert, um zu handhaben, ob es ein iPhone oder ein iPad ist. Meine Frage ist folgende: Was soll ich hinzufügen, um sicherzustellen, dass ein Benutzer jedes Mal auf die iPad-Spitze kommt? Wo füge ich das hinzu? Ich kann diese Frage bearbeiten, um jeden notwendigen Code einzuschließen. Danke im Voraus.

Bearbeiten: Aktualisierte -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: Methode.

nun darauf achten, dass Ihre Benutzer jedes Mal auf den richtigen Bildschirm zurückgeführt wird, abhängig von:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  


self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
// Override point for customization after application launch. 

UIDevice* userDevice = [UIDevice currentDevice]; 
if (userDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
    isUsingiPad = YES; 
} 

if (!isUsingiPad) { 
    self.viewController= [[PassportAmericaViewController alloc] initWithNibName:@"PassportAmericaViewController" bundle:nil]; 
} else { 
    self.viewController = [[PassportAmericaViewController alloc] initWithNibName:@"PassportAmericaViewController-iPad" bundle:nil]; 
} 

self.window.rootViewController = self.viewController; 

[self.window addSubview:navigationController.view]; 

[self.window makeKeyAndVisible]; 

return YES; 
} 

Antwort

1

Dies ist, was in den App-Vorlagen Apple verwendet, dies zu erreichen, ist es in Ihrem AppDelegatesapplicationDidFinishLaunchingWithOptions umgesetzt Ihre Einrichtung möchten Sie vielleicht in viewDidLoad oder viewDidAppear initialisieren.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
    } else { 
     self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
    } 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

Danke. Ich füge das in ein paar Minuten hinzu und markiere die Antwort, damit du die Wiederholung bekommst. – tallybear

+0

Ich bin ein wenig verwirrt. Was sollte ich verwenden, um "viewController" in "self.viewController" zu ersetzen? Ich bekomme einen Fehler, der besagt, dass viewControler nicht im Objekt gefunden wurde. – tallybear

+0

Wo implementieren Sie dies, in Ihrer ViewControl-Implementierungsdatei oder in Ihrem AppDelegate? –

1

Um dynamisch Nibs für iPad/iPhone in universellen Anwendungen geladen werden, sollten Sie die folgenden Benennungskonventionen verwenden: -

  • iPhone - MyNibName.xib
  • iPad - MyNibName ~ ipad.xib

Auf diese Weise müssen Sie keine manuellen Ladevorgänge oder if-Anweisungen ausführen.

Verwandte Themen