UIStoryboard Show(例如push)简单的逆向动作返回

UIStoryboard Show (e.g. push) simple inverse action to go back

在情节提要中,我们有很棒的功能可以让我们进行展示(例如推送)。所以似乎逻辑是下一个:

如果我们没有导航控制器,那么视图控制器将使用当前模态逻辑。我的问题是有什么可以与 Show 一起使用的反向操作吗?

我有一个关闭当前视图控制器屏幕的 UIButton:

- (IBAction)onTappedCloseButton:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}

但是如果我没有导航控制器,我怎么能简单地使用反向操作返回呢?所以我的解决方案是检查 self.navigationController 是否为 nil 然后使用关闭选项:

[self dismissViewControllerAnimated:YES completion:nil];

但也许还有另一个很酷的解决方案,如 Show(例如推送)。但是关闭(例如 pop)?

是的,您可以使用展开转场返回,这将与前转转场相反。

关于如何执行此操作,您有两种选择:

1) 放松转场

要进行展开转场,您必须在要 "unwind" 的视图控制器中添加一个方法,格式如下:

-(IBAction)someSelectorName:(UIStoryboardSegue *)sender;

然后您就可以从 UIButton 拖动到故事板中的 "exit" 图标。

将它连接到您刚刚定义的选择器,UIKit 将找出如何返回到该视图控制器,而无需您编写任何代码。这可能特别有用,因为它可以确定何时需要多次调用 -dismissViewControllerAnimated: 并可以成功调用这些方法。当您要展开到的视图控制器上显示导航控制器时,它甚至可以从嵌入在导航控制器中的视图控制器中展开。 (即它会执行 dismissViewController 而不是弹出来展开)

2) 自定义展开方法

假设您不想或不能从情节提要中触发此操作。这里还有一个选项,它在这个问题上有详细说明:

Whats the programmatic opposite of showViewController:sender:

要点是您可以通过在 UIKit 容器视图控制器(或您自己的容器)上实现类别来编写自己的通用关闭方法