如何在AppDelegate中执行Segue?

我正在尝试使用Storyboard完成IOS 5.1的应用程序。 基本上我在做一个保pipe箱的应用程序。 由于我使用的Dropbox SDK链接到Dropbox是在AppDelegate.m中处理的。 用户可以select从会话中取消链接,并在不同的视图控制器中重新链接。 所以每次用户链接和未链接的应用程序必须将视图从Appdelegate切换到未连接到rootviewcontroller的视图控制器

在原来的Dropbox的例子Dropbox处理过渡像下面的代码

- (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; } 

但是,我正在使用导航控制器的故事板和任何下面的方法不工作,我把方法在评论。

 - (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; } 

这是应用程序的故事板 在这里输入图像说明

那么如何在AppDelegate.h中切换视图?

注意:如果我添加一个segue并命名segue让我们说goToMeeting [self performSegueWithIdentifier:@“goToMeeting”sender:self];

错误我得到的是: No Visible @interface for 'AppDelegate' declares the selector performSegueWithIdentifier:sender

如果你考虑手动推动视图,而不是下面的代码segueperform最有可能会为你工作

 - (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; } 

你可以这样做:

 UINavigationController *navigationController = (UINavigationController*) self.window.rootViewController; [[[navigationController viewControllers] objectAtIndex:0] performSegueWithIdentifier:@"goToMeeting" sender:self]; 

这只会在viewControllers数组中的索引与你的视图控制器中的索引相匹配,当然存在。 在这种情况下是第一个(在数组和故事板中)。

segue(“goToMeeting”)不能附加到一个动作。 这样做的方式是通过控制 – 从故事板场景底部的文件所有者图标拖动到目标场景。 将出现一个popup窗口,将要求在“手动塞格”选项; select“推”作为types。 点击小方块,确保你在属性检查器。 给它一个标识符,你将用它来代码中引用它。