我有一个模态视图 Controller ,它位于我从不同 Controller 呈现的导航 Controller 内,并且基于不同的上下文,它应该返回到不同的 Controller 。
基本上,无论谁实现了 segue 标识符,都应该是此流程的返回点。
我有以下流程以模态方式呈现整个流程:
A( objective-C )-> B( objective-C )-> C(Swift)-> D(Swift)
A、B、C实现了相同的segue方法。
A 类和 B 类实现了 Objective-C 版本:
- (IBAction)unwindToRootTabBarViewController:(UIStoryboardSegue *)unwindSegue {}
虽然 C 类实现了 Swift 版本:
override func canPerformUnwindSegueAction(_ action: Selector, from fromViewController: UIViewController, withSender sender: Any) -> Bool {
return true
}
@IBAction public func unwindToRootTabBarViewController(segue: UIStoryboardSegue) {}
当试图展开到用 Objective-C 编写的 C 类时,它崩溃了,因为我找不到该方法,即使它在那里:
** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[App.ClassCViewController unwindToRootTabBarViewController:]: unrecognized selector sent to instance 0x7ff035c634b0'
知道为什么会发生这种情况吗?
最佳答案
我想了想,将参数类型更改为方法:
@IBAction public func unwindToRootTabBarViewController(segue: UIStoryboardSegue){}
到
@IBAction public func unwindToRootTabBarViewController(_: UIStoryboardSegue){}
成功了!
我认为这与 Swift 和 Objective-C 处理方法签名的方式有关。
关于ios - 不能使用在 Swift 中使用的 Objective-C 中定义的 unwind segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461392/