iOS 6 - 以编程方式触发 Unwind Segue 不执行任何操作

2024-01-14

在我的应用程序启动时,它使用 segue 以编程方式显示 LoginViewController。视图控制器以模态方式呈现,过渡设置为交叉溶解。身份验证成功后,我想通过以编程方式触发展开转场来关闭登录视图。所以我将其添加到我的头文件中:

- (IBAction)unwindSegue:(UIStoryboardSegue *)segue;

现在在 IB 中,我可以从“文件所有者”LoginViewController 控制拖动到“退出”按钮,然后选择unwindSegue:。这将创建一个手动转场,它正确显示在文件所有者和退出按钮的连接检查器中。然后,我单击 IB 场景中新创建的 Unwind segue,然后为其命名。如果我单击展开转场操作的“转到”按钮,它将带我到上面提到的声明。

到目前为止一切顺利,然后我在 GCD 块中成功验证后触发此展开序列:

....
dispatch_async(dispatch_get_main_queue(), ^
{
    [self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self];

    [self.spinner removeFromSuperview];
    self.spinner = nil;
});

......运行时什么也没有发生。微调器确实被正确删除,但没有迹象表明展开转场正在执行。

执行中的一个断点unwindSegue:永远不会被击中。没有抛出任何错误。没有任何内容写入控制台。标识符是正确的,我三次检查(否则无论如何都会失败)。

我看了答案here https://stackoverflow.com/questions/12792573/cannot-connect-storyboard-unwind-segue, here https://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-to-use-them and here https://stackoverflow.com/questions/12509422/how-to-perform-unwind-segue-programmatically但我似乎没有错过任何事情。

What I did notice though, is that Xcode thinks unwindSegue: is not linked: linked? not linked?

我无法从前面的小空圆圈中拖动unwindSegue:并将其链接到“退出”按钮。

任何帮助将不胜感激。


如果您使用模态转场进入登录视图,您需要返回的就是调用

[self dismissViewControllerAnimated:YES completion:nil];

更准确地说,您应该在呈现的控制器(您的第一个控制器)上调用它,但如果您在呈现的控制器上调用,它将被转发。您可以使用完成块进行任何所需的清理。没有必要使用GCD。

EDIT

回答附加评论:根据您的描述,我不太确定,但您似乎已经在呈现控制器而不是呈现控制器。展开转场允许在调用者处执行某些操作(例如,设置数据),而无需附加协议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 6 - 以编程方式触发 Unwind Segue 不执行任何操作 的相关文章

随机推荐