2

我有一个允许用户登录和注册的 HomeController。如果用户单击登录,我会使用 segue 打开一个模式视图。

在模态视图中有一个按钮,上面写着注册。所需的操作是关闭登录模式视图,然后使用打开注册模式视图performSegueWithIdentifier:

- (void)loginControllerDidRegister:(LoginController *)controller sender:(id)sender
{
    NSLog(@"loginControllerDidRegister");
    [self dismissViewControllerAnimated:YES completion:nil];
    [self performSegueWithIdentifier:@"RegistrationSegue" sender:sender];
}

这正确地关闭了模态视图,然后它调用performSegueWithIdentifier:,其中我有记录代码显示它正在被调用,就像我按下了注册按钮一样。

我认为登录模态视图消失的动画可能会干扰第二个模态视图的显示。关于可以做些什么来解决这个问题的任何想法?

4

3 回答 3

2

那么你需要启动你的“第二模式”vc。这就是“prepareForSegue:”方法的作用。您还需要覆盖“执行:”方法。这将比您想象的要复杂一些。如果有帮助这里是segue如何工作的细分......

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

没有这些,就无法执行 segue。这些类似于手动分配视图控制器

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];

是什么让这一切发生。您基本上将不得不与引擎盖下的那些进行调整以获得您想要的工作,但它是可行的。

于 2012-05-04T21:40:43.360 回答
0

您必须将第二个模态视图控制器的 performSegue 放在 dismissViewControllerAnimated 调用的完成块中。UINavigationController 在呈现其他模态视图控制器时无法处理呈现。

于 2014-06-02T09:22:10.007 回答
0

如果有人有同样的问题。

- (void)loginControllerDidRegister:(LoginController *)controller sender:(id)sender
{
    NSLog(@"loginControllerDidRegister");
    [self dismissViewControllerAnimated:YES completion:^{
        [self performSegueWithIdentifier:@"RegistrationSegue" sender:sender];
    }];  
}
于 2014-08-27T14:34:50.597 回答