performSegueWithIdentifier没有触发

时间:2014-09-01 13:05:06

标签: ios objective-c uistoryboardsegue

我有一个带有按钮的视图控制器,可以通过STTwitter启动Twitter登录页面。 shouldPerformSegueWithIdentifier函数返回NOYES,具体取决于isDoneTwitterLogin iVar。

在函数- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation中, 我有以下代码:

LoginViewController *loginViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"Twitter Login"];
[loginViewController doneTwitterLogin:YES];
[loginViewController.navigationController performSegueWithIdentifier:@"User Info" sender:viewController];

最后一行没有做任何事情。 shouldPerformSegueWithIdentifier也没有被解雇。

我做错了什么? 我的故事板中有一个来自LoginViewController的名为“用户信息”的segue。

更新1:LoginViewController场景嵌入UINavigationController。 segue“用户信息”已连接到UIButton场景中的LoginViewController。这是我尝试过的新代码:

LoginViewController *loginViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"Twitter Login"];
[loginViewController doneTwitterLogin:YES];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:loginViewController];
NSLog(@"%@", loginViewController.navigationController);
[loginViewController.navigationController performSegueWithIdentifier:@"User Info" sender:loginViewController];

之前的代码正在返回(null)导航控制器。上面的代码返回一个有效的UINavigationController对象。

更新2:上面的代码生成了一条错误消息,指出UINavigationController的实例没有名为“User Info”的segue。我已将该行更改为以下一行:

[loginViewController performSegueWithIdentifier:@"User Info" sender:loginViewController];

但这也没有做任何事情。

3 个答案:

答案 0 :(得分:3)

好的,我解决了我的问题。它与在应用程序转到后台时保存当前显示的视图控制器,然后在应用程序激活之前执行segue有关。并感谢downvote。真让我有宾至如归的感觉!

答案 1 :(得分:0)

在执行segue的视图控制器上调用

shouldPerformSegueWithIdentifier

在这种情况下,以下行:

[loginViewController.navigationController performSegueWithIdentifier:@"User Info" sender:viewController];

在这种情况下,我们调用此方法的视图控制器(以及我们要求执行segue的视图控制器)是loginViewController' s {{ 1}}。

我觉得最有可能是你从navigationController连接了segue而且loginViewController实际上没有导航控制器(loginViewController返回{{ 1}})。否则,我想这个代码会崩溃,你会收到一条消息,告诉你loginViewController.navigationController没有这个名字的segue等。

假设故事板上的所有内容都正确连接,我们可能只需要改变我们调用nil的方式:

UINavigationController

(如果这不起作用,那么您将不得不提供更多详细信息。)

答案 2 :(得分:0)

如果您在故事板上创建了一个导航控制器并将loginViewController嵌入其中,那么您就不需要创建导航控制器的新实例。

LoginViewController *loginViewController = 
                          [[UIStoryboard storyboardWithName:@"Main" 
                                                     bundle:[NSBundle mainBundle]]
                    instantiateViewControllerWithIdentifier:@"Twitter Login"];
[loginViewController doneTwitterLogin:YES];
//perform segue from  login to user info controller.
[loginViewController performSegueWithIdentifier:@"User Info"
                                         sender:loginViewController ];