19

我正在使用 iOS 5 SDK 创建一个应用程序。我设法使用 Storyboard 的 Segues 推送视图,但我找不到弹出当前视图并返回前一个视图的正确方法。

我没有使用任何导航控制器(该应用程序没有任何顶部或底部栏)。

我不认为使用模态或以其他方式推送 segue 将是解决方案,因为它实例化了一个新控制器。

我是否必须使用带有相反动画的自定义 Segue 并在最后删除视图?或者,还有更好的方法 ?

4

5 回答 5

54

iOS 5 中的情节提要不提供从 segue 返回的“无代码”方式——这是您需要自己实现的东西。

如果您使用“push”segue(需要导航控制器),请使用导航控制器的popViewControllerAnimated:方法撤消最后一个 push segue。(或其他撤消更多操作的方法;请参阅UINavigationController文档。)

如果您使用“模态”segues,请调用dismissViewControllerAnimated:completion:呈现当前视图控制器的视图控制器(您可以从其presentingViewController属性中获取)。


更新:在 iOS 6 及更高版本中,在情节提要中“返回”有展开转场。它仍然不是无代码解决方案——也不应该是这样,因为您需要能够从模态视图控制器中区分“完成”和“取消”退出。但它确实可以让您将应用程序的更多语义流放入情节提要中。Apple 有一份技术说明对它们进行了详细描述,它们也包含在WWDC 2012 Session 407 的视频中

于 2012-06-14T15:09:37.117 回答
26

您可以尝试[self dismissViewControllerAnimated:YES completion:nil];从要关闭的控制器调用(无论控制器已被推送,还是模态显示)。

这是相关文档:UIViewController 类参考

呈现视图控制器负责关闭它呈现的视图控制器。如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发到呈现的视图控制器。

于 2012-06-14T15:06:13.297 回答
16

只是为了澄清。

在被推的班级里。只需连接以下内容,控制器和视图就会弹出。

[self.navigationController popViewControllerAnimated:YES];
于 2012-10-08T03:57:38.517 回答
3

在您的 stroyboard 上创建 Segue 类型“自定义”。这可以来自一个按钮。创建一个名为“popSegue”的新 UIStoryboardSegue 类在 popSegue.m 文件中添加以下内容;

-(void)perform{
    UIViewController *sourceViewContreoller = [self sourceViewController];
    [sourceViewContreoller.navigationController popViewControllerAnimated:YES];
}

- 在故事板编辑器中。

-选择segue并将Segue Class更改为“popSegue”

- 将标识符设置为“popSegue”

完毕!

您可以在整个项目中使用相同的“popSegue”类。

希望这可以帮助

于 2013-07-28T21:15:47.547 回答
2

我也在使用 Xcode 5,这就是它的完成方式。首先,在推送对方的视图代码文件中,在.h文件中创建一个IBAction方法,如下所示:

- (IBAction)exitToHere:(UIStoryboardPopoverSegue *)segue sender:(id)sender;

Then in the .m file add this:

- (IBAction)exitToHere:(UIStoryboardPopoverSegue *)segue sender:(id)sender {

}

您可以在此方法中添加要执行的任何清理代码。接下来转到您的故事板并选择推送的视图。我假设您在视图上有某种按钮,用户点击以表示他已完成。单击该按钮,按住键并拖动到视图下方的绿色框,即出口。释放鼠标按钮但继续按住键。将出现一个弹出窗口,您的方法将显示在列表中。选择该方法。现在,当用户单击按钮时,视图将弹出,您将返回到启动方法。

于 2013-10-11T07:30:23.777 回答