2014-09-22 12 views
6

In che modo un'app può accedere allo XIB o allo storyboard utilizzato per la schermata di avvio? XIB non è nel bundle principale (es: NSBundle.mainBundle().pathsForResourcesOfType(nil, inDirectory: "")). Questo è particolarmente inaspettato poiché "Launch Screen.xib" è elencato nella fase di compilazione "Copia risorse pacchetto" ma non mostra l'ip nel pacchetto, quindi Xcode deve trattarlo in modo speciale.Accesso programmatico alla schermata di lancio XIB o storyboard

risposta

5

Come Xib non è nel pacchetto principale ottenendo percorso ritorna a zero, ma è possibile ottenere la XIB dello schermo lancio senza l'aiuto di percorso usando il metodo

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

o

È possibile caricare ottenere vista da XIB come

// 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 non stava generando il NIB per la schermata di avvio in modo che questo codice si arrestasse in modo anomalo. Se il NIB non è nel bundle, 'bundle.loadNibNamed (...)' non funziona. Sono stato in grado di farlo funzionare giocando con l'opzione "Usa come schermata di avvio" in Interface Builder che ha reso Xcode generare il NIB. – ide

+0

@ide update Xcode, per impostazione predefinita crea LaunchScreen.xib durante la creazione del progetto stesso. –

+0

Voglio dire che avevo LaunchScreen.xib e veniva visualizzato quando lanciavo l'app ... solo che Xcode non lo convertiva in un file NIB e lo copiava nel pacchetto. – ide

0

in seguito alla mia domanda, sembra che la commutazione "Usa come schermata di avvio" e spegnendo Xcode causato per costruire un file NIB per la schermata di lancio .

  1. Dopo aver fatto una pulizia completa (rimosso DerivedData) e l'eliminazione l'applicazione dal dispositivo, io attivata off "Usa come schermata di avvio" per il principale controller della vista in LaunchScreen.xib. L'esecuzione dell'applicazione ha causato l'avvio senza una schermata di avvio, ma ora la build stava creando LaunchScreen.nib.
  2. Si è pulito di nuovo e ha eliminato l'app dal dispositivo. Attiva e riattiva "Usa come schermata di avvio". Nel pacchetto di app sotto la nuova cartella DerivedData, LaunchScreen.nib era ancora lì.
  3. bundle.loadNibNamed(...) ha funzionato bene ora.

4

Se LaunchScreen è storyboard e non un xib, utilizzare il seguente codice.

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