按下后退按钮时自定义 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;
}
然而,这并没有被调用。我在这里做错了什么?
- 我假设您仍在通过缩放切换视图
- 我是 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
}}
我有一个 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;
}
然而,这并没有被调用。我在这里做错了什么?
- 我假设您仍在通过缩放切换视图
- 我是 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 }}