3

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

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

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

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

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

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

......运行时没有任何反应。微调器确实被正确移除,但没有迹象表明展开 segue 正在执行。

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

我在这里这里这里查看了答案,但我似乎没有错过任何东西。

我确实注意到,Xcode 认为没有unwindSegue:链接: 链接? 没有链接?

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

任何帮助将不胜感激。

4

2 回答 2

8

如果您使用模态 segue 转到您的登录视图,您需要返回的只是调用

[self dismissViewControllerAnimated:YES completion:nil];

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

编辑

回答附加评论:我不太确定您的描述,但似乎您已经在呈现的控制器而不是在呈现的控制器上实现展开操作。Unwind segues 允许在调用者处做一些事情(例如,设置数据),而不需要额外的协议。

于 2013-02-20T09:43:06.770 回答
2

引用 Apple 关于 Unwind Segue 的技术说明中的文字:要添加只能以编程方式触发的展开 segue,请从场景的视图控制器图标中控制并拖动到其退出图标,然后从弹出菜单中为新的 segue 选择一个展开动作。

链接到技术说明

于 2013-11-06T19:17:31.127 回答