我已经创建了一个自定义segue,用于在容器中呈现视图控制器,与苹果的模态视图控制器非常相似(我已将其实现为UIViewController子类)。
我现在正在尝试创建一个自定义返回segue,但是我无法调用方法-segueForUnwindingToViewController: fromViewController: identifier:
。
我还在我的容器上实现了-viewControllerForUnwindSegueAction: fromViewController: withSender:
,以便我可以指向正确的视图控制器(呈现此模态视图控制器的那个),但随后应要求我的自定义返回segue的方法没有被调用。
现在,我唯一的方法是在-returned:
方法中进行关闭此模态视图控制器。
是否有人成功使用自定义返回segue完成这个操作?
编辑: 更多代码和上下文
我的返回视图控制器是在Storyboard中配置的,不是通过编程方式实现的。
我在我的控制器中有这些关于返回segue的代码:
PresenterViewController.m
我在这里使用自定义方法来关闭我的自定义模态视图控制器(-dismissModalViewControllerWithCompletionBlock:
)。
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController
fromViewController:(UIViewController *)fromViewController
identifier:(NSString *)identifier {
return [[MyModalUnwindSegue alloc] initWithIdentifier:identifier
source:fromViewController
destination:toViewController];
}
-(IBAction)returned:(UIStoryboardSegue *)segue {
if ([segue.identifier isEqualToString:@"InfoUnwindSegue"]) {
[self dismissModalViewControllerWithCompletionBlock:^{}];
}
}
MyModalViewController.m
这里我仅使用 -viewControllerForUnwindSegueAction: fromViewController: withSender:
来指向应该返回的视图控制器。
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action
fromViewController:(UIViewController *)fromViewController
withSender:(id)sender {
return self.myPresentingViewController;
}
我预期的行为是MyModalViewController被调用指向应该处理取消操作的视图控制器,并且在调用-returned:
之前,这个视图控制器会调用-segueForUnwindingToViewController: fromViewController: identifier:
方法。目前
-segueForUnwindingToViewController: fromViewController: identifier:
从未被调用。我必须说,我已经尝试过不同的配置。无论我将我的方法放在哪里以返回取消操作的转场,它都从未被调用。我读到可以对导航控制器进行子类化然后它就会被调用,但我不知道它如何适用于我的解决方案。
编辑2:附加信息
我已检查MyModalViewController是否在我想要关闭由它呈现的常规模态视图控制器时调用了他的
-segueForUnwindingToViewController: fromViewController: identifier:
方法。这可能是因为他是层次结构中最高级别的UIViewController。在检查此内容后,我对UINavigationController进行了子类化,并使用这个子类来包含我的PresenterViewController。令人惊讶的是,他的
-segueForUnwindingToViewController: fromViewController: identifier:
方法也被调用了。我相信只有作为容器的视图控制器才会被调用这个方法。对我来说,这有点不合理,因为它们不是唯一呈现其他视图控制器的视图控制器,它们的子视图控制器也在这样做。
对我来说,在这个子类中创建选择使用哪个segue类的逻辑是不可行的,因为这个类不知道它们的子视图控制器所做的事情。
苹果论坛暂时无法提供支持。如果有人对此有更多信息,请帮忙解决!我想缺乏关于这个问题的文档是它还不够稳定的一个良好指标。