按下后退按钮时自定义 UIStoryboardSegue?

Custom UIStoryboardSegue on back button press?

我有一个 UIStoryboardSegue 'zooms' 一个 UIImageView 的习惯。现在我还需要一个自定义 UIStoryboardSegue,当用户按下 UINavigationController 中的后退按钮时 'zooms out'。几天来我一直在尝试这样做,但没有成功。

我已经将 UINavigationController 子类化并添加了下面的代码:

- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier {

    UIStoryboardSegue *theSegue;

    NSLog(@"Unwind called");

    if ([fromViewController isKindOfClass:[SetDetailViewController class]]) {
        theSegue = [ZoomOutSegue segueWithIdentifier:identifier source:fromViewController destination:toViewController performHandler:^(void){}];
    } else {
        theSegue = [super segueForUnwindingToViewController:toViewController fromViewController:fromViewController identifier:identifier];
    }

    return theSegue;
}

然而,这并没有被调用。我在这里做错了什么?

  1. 我假设您仍在通过缩放切换视图
  2. 我是 Swiftie 所以我的帮助会在 Swift

您应该能够捕获这些事件,方法是让您的 class 成为导航控制器的委托,然后使用导航控制器

willShowViewController 方法
  • 在定义 class 时将 UINavigationControllerDelegate 添加到
  • 在你的 viewDidLoad() 函数下添加 self.navigationController?.delegate = self
  • 现在您应该能够使用一个函数,该函数将 运行 就在导航控制器切换到新的视图控制器之前(所以是的,它也会 运行 当后退按钮被按下)。在 Swift 中它看起来像这样:

    func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
    
    //if the view controller we are going to is one we want to trigger this action
    if let _ = viewController as? ViewController {
        //perform the thing you want here
    }}