2011-11-06 7 views

risposta

21

Non sono sicuro se sto capendo correttamente alla domanda penso che ti stai chiedendo come si fa a ottenere la prima viewController in uno storyboard. Per ottenere questo si chiama,

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *vc =[storybord instantiateInitialViewController]; 

Modificare il nome dello storyboard per soddisfare il vostro nome, MainStoryboard è solo il nome di default. Spero che questo sia quello che stavi cercando.

Edit:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *vc =[storybord instantiateInitialViewController]; 
    //set the delegate on the view controller that you have loaded 
    // Override point for customization after application launch. 
    return YES; 
} 
+0

sì, è quello che mi serviva. qualche idea su come caricare lo storyboard corretto per il dispositivo in un'app universale (iphone vs ipad)? –

+0

Questo dovrebbe farlo 'UIViewController * vc; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { UIStoryboard * storybord = [UIStoryboard storyboardWithName: @ "MainiPadStoryboard" bundle: nil]; vc = [storybord instantiateInitialViewController]; } else { UIStoryboard * storybord = [UIStoryboard storyboardWithName: @ "MainiPhoneStoryboard" bundle: nil]; vc = [storybord instantiateInitialViewController]; } ' –

+11

Abbastanza sicuro che stia acquisendo una nuova copia, non quella esistente. –

15

Invece di creare nuova copia del vostro storyboard esistente utilizzando

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

è possibile impostare nel file di intestazione vostra applicazione del delegato questa proprietà

@property (nonatomic, weak) UIViewController* initialViewController; 

e in questo metodo assegna semplicemente self.window.rootViewController alla proprietà

Questo dovrebbe funzionare, perché nella proprietà della finestra del protocollo delegato dell'app è l'accesso a rootViewConroller e questo controller è initialViewController se si utilizzano storyboard.

+0

Funziona, ed è la risposta corretta; istanziare un nuovo controller non equivale a puntare a quello già istanziato dallo storyboard. – Wizfinger

+0

Sì, questa dovrebbe essere la risposta accettata. – Martin

-1

Swift 2.0 Implementazione per coloro che volevano.

Potrebbe essere necessario modificare STROYBAORD e identificatore di vista del controller. Anche o

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     let storyboard: UIStoryboard = UIStoryboard(name: "[STORYBOARD NAME]", bundle: nil) 
     let viewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier("[CONTROLLER IDENTIFIER]") // You have replace UIViewController with you customer controll type 


     self.window?.rootViewController = viewController 
     self.window?.makeKeyAndVisible() 

     return true 
    } 
+0

prova a capire il problema invece di convertire semplicemente la risposta accettata in rapida ... – Martin

+0

@Martin Ho modificato la risposta.Spero che persino un principiante dell'IOS possa capire ora. –

+0

ma le tue soluzioni creano un nuovo controller di visualizzazione mentre @aran stava cercando una soluzione per ottenere il primo controller di visualizzazione esistente. La risposta attualmente accettata non è una buona risposta. – Martin

Problemi correlati