我有一个带有按钮的视图控制器,可以通过STTwitter
启动Twitter登录页面。 shouldPerformSegueWithIdentifier
函数返回NO
或YES
,具体取决于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];
但这也没有做任何事情。
答案 0 :(得分:3)
好的,我解决了我的问题。它与在应用程序转到后台时保存当前显示的视图控制器,然后在应用程序激活之前执行segue有关。并感谢downvote。真让我有宾至如归的感觉!
答案 1 :(得分:0)
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 ];