2013-04-11 22 views
7

Probieren Sie meine Hand bei einem universellen Projekt, ich möchte eine VC nach Bezeichner aus Storyboard laden. Gibt es eine Möglichkeit, eine explizite Überprüfung des Idioms beim Zugriff auf das Storyboard zu vermeiden?Holen Sie sich das Haupt-Storyboard in Universal-App

Dieser hässliche Code funktioniert ....

UIStoryboard *storyboard; 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; 
} 
else { 
    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
} 

UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"]; 

Aber igitt. Das String-Literal-Haupt-Storyboard ist schwer genug anzusehen (nicht sicher, warum das Projekt keine Haupt-Storyboard-Einstellung speichern kann, so dass Apps [UIStoryboard mainStoryboard] sagen können;), aber die explizite Idiom-Prüfung ist eine Brücke zu weit.

Gibt es versteckte Intelligenz (vergleichbar mit "@ 2x" -Bildsuffixen, die Retina-Displays unterstützen), die diesen Code bereinigen könnten?

Antwort

16

Angenommen, Sie führen den veröffentlichten Code aus einem anderen View-Controller aus. Sie können das aktuelle Storyboard immer über [self storyboard] abrufen, wobei self eine beliebige Instanz eines UIViewController ist.

+1

Danke. Zwei Vögel mit einem Stein. Ich wünschte, ich könnte zweimal upvotieren. – danh

+0

Danke Desmond! – Oritm