2014-09-22 3 views
6

Wie kann eine App auf das XIB oder Storyboard zugreifen, das für den Startbildschirm verwendet wird? Die XIB befindet sich nicht im Hauptpaket (Beispiel: NSBundle.mainBundle().pathsForResourcesOfType(nil, inDirectory: "")). Dies ist besonders unerwartet, da "Launch Screen.xib" in der Build-Phase "Bundle-Ressourcen kopieren" aufgeführt ist, aber ip im Bundle nicht angezeigt wird. Daher muss Xcode dies speziell behandeln.Programmgesteuertes Zugreifen auf den Startbildschirm XIB oder Storyboard

Antwort

5

Wie Xib ist nicht in dem Hauptbündel immer Pfad Null zurückkehrt, aber Sie können die XIB des Startbildschirm ohne die Hilfe des Pfades mit der Methode

let launchScreenNib = UINib(nibName: "LaunchScreen", bundle: nil) 

oder

Sie können erhalten erhalten laden Ansichten von XIB als

// Swift 
let objects = NSBundle.mainBundle().loadNibNamed("LaunchScreen", owner: self, options: nil) 
let view = objects[0] as UIView 

// Obj C 
NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"LaunchScreen" owner:self options:nil]; 
UIView *view = [objects objectAtIndex:0]; 
+1

Xcode erzeugte die NIB für den Startbildschirm nicht, daher würde dieser Code abstürzen. Wenn die NIB nicht im Bundle ist, funktioniert 'bundle.loadNibNamed (...)' nicht. Ich konnte es erreichen, indem ich mit der Option "Als Startbildschirm verwenden" im Interface Builder spielte, wodurch Xcode die NIB erzeugte. – ide

+0

@ide Update Xcode, standardmäßig erstellt LaunchScreen.xib während der eigentlichen Projekterstellung. –

+0

Ich meine, ich hatte LaunchScreen.xib und es wurde angezeigt, als ich die App startete ... nur, dass Xcode es nicht in eine NIB-Datei umwandelte und es in das Bundle kopierte. – ide

0

auf meine eigene Frage Anknüpfend, es sieht „Verwenden sie als Startbildschirm“ aus und verursacht Xcode eine NIB-Datei für den Start-Bildschirm zu bauen wie Makeln .

  1. Nach einer kompletten sauber (entfernt DerivedData) und Löschen der App aus dem Gerät zu machen, ich ein- und ausgeschaltet „Verwenden Sie als Startbildschirm“ für die Hauptansicht-Controller in LaunchScreen.xib. Wenn die App ausgeführt wurde, wurde sie ohne Startbildschirm gestartet, aber der Build erstellte jetzt LaunchScreen.nib.
  2. Wurde eine komplette Reinigung wieder und löschte die App aus dem Gerät. Toggled "Als Startbildschirm verwenden" wieder aktiviert und neu erstellt. Im App-Bundle unter dem neuen Ordner "DerivedData" war LaunchScreen.nib immer noch vorhanden.
  3. bundle.loadNibNamed(...) hat jetzt gut funktioniert.

4

Wenn LaunchScreen ist storyboard und kein xib, Verwenden Sie den folgenden Code ein.

let launchScreen = UIStoryboard(name: "LaunchScreen", bundle: nil).instantiateInitialViewController() 
if let launchView = launchScreen?.view { 
    view.addSubview(launchView) 
} 
Verwandte Themen