2011-11-06 17 views

Respuesta

21

No estoy seguro de si estoy entendiendo bien la pregunta creo que usted está pidiendo, ¿cómo conseguir el primer viewController en un guión gráfico. Para conseguir esto se llama,

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

Cambiar el nombre del guión gráfico para adaptarse a su nombre, MainStoryboard es sólo el nombre por defecto. Espero que esto sea lo que estabas buscando.

Editar:

- (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í, eso es lo que necesitaba. ¿Alguna idea sobre cómo cargar el guión gráfico correcto para el dispositivo en una aplicación universal (iphone vs ipad)? –

+0

Esto debería hacerlo 'UIViewController * vc; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { UIStoryboard * storybord = [UIStoryboard storyboardWithName: @ "MainiPadStoryboard" paquete: nil]; vc = [storybord instantiateInitialViewController]; } else { UIStoryboard * storybord = [UIStoryboard storyboardWithName: @ "MainiPhoneStoryboard" paquete: nil]; vc = [storybord instantiateInitialViewController]; } ' –

+11

Bastante seguro de que esto está tomando una nueva copia, no la existente. –

15

En lugar de crear una nueva copia de su guión gráfico existente utilizando

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

se puede establecer en el archivo de cabecera del delegado de la aplicación de esta propiedad

@property (nonatomic, weak) UIViewController* initialViewController; 

y en este método simplemente asigne self.window.rootViewController a la propiedad

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.initialViewController = self.window.rootViewController; 

    return YES; 
} 

esto debería funcionar, ya que en la ventana de propiedades del protocolo de aplicación delegado es el acceso a rootViewConroller y este controlador es initialViewController si se utiliza guiones gráficos.

+0

Esto funciona, y es la respuesta correcta; crear instancias de un nuevo controlador no es lo mismo que señalar al ya instanciado del guión gráfico. – Wizfinger

+0

Sí, esta debería ser la respuesta aceptada. – Martin

-1

Implementación de Swift 2.0 para quienes lo deseaban.

Es posible que deba modificar el STROYBAORD y el identificador de la vista del controlador. También 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

intente comprender el problema en lugar de simplemente convertir la respuesta aceptada en rápida ... – Martin

+0

@Martin He editado la respuesta.Espero que incluso un principiante de IOS pueda entender ahora. –

+0

pero sus soluciones crean un nuevo controlador de vista mientras que @aran estaba buscando una solución para obtener el primer controlador de vista existente. La respuesta actualmente aceptada no es una buena respuesta. – Martin

Cuestiones relacionadas