我有一个允许用户登录和注册的HomeController。如果用户单击登录,我使用segue打开模态视图。
在模态视图中有一个按钮,表示注册。所需操作是关闭登录模式视图,然后使用performSegueWithIdentifier:
- (void)loginControllerDidRegister:(LoginController *)controller sender:(id)sender
{
NSLog(@"loginControllerDidRegister");
[self dismissViewControllerAnimated:YES completion:nil];
[self performSegueWithIdentifier:@"RegistrationSegue" sender:sender];
}
这正确地取消了模态视图,然后调用performSegueWithIdentifier:
,其中我有记录代码,显示它被调用,就像我按下了注册按钮一样。
我认为登录模态视图消失的动画可能会干扰第二个模态视图的显示。关于如何解决这个问题的任何想法?
答案 0 :(得分:2)
你需要启动你的“第二模态”vc。这就是“prepareForSegue:”方法的作用。你还需要覆盖“perform:”方法。这比你想象的要复杂一点。如果有帮助,这里是一个细分如何工作的细分......
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;
被调用并传入“segue”。在幕后
- (id)initWithIdentifier:(NSString *)identifier source:(UIViewController *)source destination:(UIViewController *)source;
被调用,这就是创建“segue”的地方。
“segue”对象具有
的属性(NSString *)identifier
(UIViewController *)sourceViewController
(UIViewController *)destinationViewController
没有这些,不能进行。这些类似于手动分配视图控制器
SomeViewController *secondView = [SomeViewController alloc] initwithNibName:@"SomeViewController" bundle:nil];
然后
[[segue destinationViewController] setModalTransitionStyle:UIModalTransitionStyle(...)];
这是......
secondView.modalTransitionStyle = UIModalTransitionStyle(...);
(...)将是故事板中选择的“segue”转换。
最后
[[segue sourceViewController] presentModalViewController:destinationViewController animated:YES];
只是
[self presentModelViewController:secondView animated:YES];
是让一切成为现实的原因。你基本上必须调整那些引人注目的东西,以获得你想要的工作,但它是可行的。
答案 1 :(得分:0)
您必须将第二个模态视图控制器的performSegue放在dismissViewControllerAnimated调用的完成块中。当UINavigationController仍然呈现其他模态视图控制器时,它无法处理该演示文稿。
答案 2 :(得分:0)
如果有人有同样的问题。
- (void)loginControllerDidRegister:(LoginController *)controller sender:(id)sender
{
NSLog(@"loginControllerDidRegister");
[self dismissViewControllerAnimated:YES completion:^{
[self performSegueWithIdentifier:@"RegistrationSegue" sender:sender];
}];
}