2012-09-06 19 views
10

Estoy intentando completar una aplicación en IOS 5.1 con Storyboard. Básicamente estoy haciendo una aplicación de Dropbox. Dado que estoy usando el enlace de Dropbox SDK a Dropbox se maneja en AppDelegate.m. El usuario tiene la opción de poder desvincularse de una sesión y vincular nuevamente en diferentes Controladores de Vista. Así que cada vez que el usuario enlace y aplicación desvinculado tiene que cambiar la vista de AppDelegate a un controlador de vista que no está conectada a RootViewController¿Cómo realizar Segue en AppDelegate?

En el ejemplo original del Dropbox Dropbox manejado transición como siguiente código

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if ([[DBSession sharedSession] handleOpenURL:url]) { 
     if ([[DBSession sharedSession] isLinked]) { 
      [navigationController pushViewController:rootViewController.photoViewController animated:YES]; 
     } 
     return YES; 
    } 

    return NO; 
} 

Pero yo estoy usando Storyboard con El controlador de navegación y cualquiera de los siguientes métodos no funcionan. Puse métodos en comentarios.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if ([[DBSession sharedSession] handleOpenURL:url]) { 
     if ([[DBSession sharedSession] isLinked]) { 

      NSLog(@"App linked successfully!"); 
      // At this point you can start making API calls 

      /*UIViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"MeetingViewController"]; 
      [self.navigationController pushViewController:viewController animated:YES]; */ 

      //[self performSegueWithIdentifier:@"xxxx" sender:self]; 

      /* LoginDropboxViewController *loginController=[[LoginDropboxViewController alloc] initWithNibName:@"LoginDropbox" bundle:nil]; 
      [navigationController pushViewController:loginController animated:YES]; */ 

     } 
     return YES; 
    } 
    // Add whatever other url handling code your app requires here 
    return NO; 
} 

Aquí está el guión gráfico de la aplicación enter image description here

Entonces, ¿cómo puedo cambiar de punto de vista en AppDelegate.h?

Nota: Si agrego un segue y el nombre del segue digamos goToMeeting [self performSegueWithIdentifier: @ "goToMeeting" remitente: self];

error que consigo es: No Visible @interface for 'AppDelegate' declares the selector performSegueWithIdentifier:sender

Respuesta

12

Si se tiene en cuenta que empuja vista manualmente en lugar de segueperform siguiente código más probable que funcione para usted

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if ([[DBSession sharedSession] handleOpenURL:url]) { 
     if ([[DBSession sharedSession] isLinked]) { 

      NSLog(@"App linked successfully!"); 
      // At this point you can start making API calls 

      //push view manually 
      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
      LoginDropboxViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"LoginDropbox"]; 
      [(UINavigationController*)self.window.rootViewController pushViewController:ivc animated:NO]; 



    } 
     return YES; 
    } 
    // Add whatever other url handling code your app requires here 
    return NO; 
} 
5

Puede hacerlo de esta manera:

UINavigationController *navigationController = (UINavigationController*) self.window.rootViewController; 

[[[navigationController viewControllers] objectAtIndex:0] performSegueWithIdentifier:@"goToMeeting" sender:self]; 

Esto solo funcionará si el índice en la matriz viewControllers coincide con el de su controlador de vista y si existe, por supuesto. En este caso, es el primero (en el conjunto y el guión gráfico).

El segue ("goToMeeting") no se debe adjuntar a una acción. La forma de hacerlo es arrastrando el control desde el icono del propietario del archivo en la parte inferior de la escena del guión gráfico hasta la escena de destino. Aparecerá una ventana emergente que pedirá una opción en "Segue manual"; elige "Push" como tipo. Toca el pequeño cuadrado y asegúrate de estar en el Inspector de Atributos. Déle un identificador que usará para referirse a él en el código.

+3

Pero, ¿qué puedo hacer si necesito pasar datos de parámetros a la llamada performSegueWithIdentifier? ¿En delegado de aplicación no hay ViewController así que no pude sobrescribir la llamada prepareForSegue()? – ChaosSpeeder

Cuestiones relacionadas