在iOS 5上使用Segues/Storyboard弹出当前视图

20

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

我没有使用任何navigationController(应用程序没有任何顶部或底部栏)。

我认为使用模态或向另一个方向推送segue不是解决方案,因为它会实例化一个新的控制器。

我需要使用相反的动画和删除视图的自定义Segue吗?还是有更好的方式?

5个回答

54

iOS 5中的故事板(Storyboards)没有提供“无代码”返回Segue的功能--您需要自己实现。

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

如果使用“modal” Segue,请在呈现当前视图控制器的视图控制器上调用dismissViewControllerAnimated:completion:方法(可以从其presentingViewController属性获取该视图控制器)。


更新:在iOS 6及更高版本中,有可回退Segue的选项。仍然不是无代码解决方案--也不应该是,因为您需要能够区分模态视图控制器的“完成”和“取消”退出。但它确实让您将应用程序的语义流程更多地放入故事板中。苹果公司有一份技术说明文档详细描述了此内容,并且还在WWDC 2012 Session 407的视频中介绍了这些内容


26
你可以尝试从你想要关闭的控制器中调用[self dismissViewControllerAnimated:YES completion:nil];(无论控制器是已推送还是以模态方式显示)。
以下是相关文档:UIViewController类参考

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


16
注意:这不能用于导航控制器(以执行弹出操作)上。 - Ben Mosher

16

只是为了澄清。

在被推送的类中,只需连接以下内容,控制器和视图将被弹出。

[self.navigationController popViewControllerAnimated:YES];

3
在你的故事板上创建Segue类型为“Custom”。这可以是来自按钮的。 创建一个名为“popSegue”的新UIStoryboardSegue类。 在popSegue.m文件中添加以下内容;
-(void)perform{
    UIViewController *sourceViewContreoller = [self sourceViewController];
    [sourceViewContreoller.navigationController popViewControllerAnimated:YES];
}

-在故事板编辑器中。

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

-将标识符设置为“popSegue”

完成!

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

希望这有所帮助


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 {

}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接