【发布时间】:2015-12-27 11:29:49
【问题描述】:
假设我有一个名为 VC2 的视图控制器类的实例。在 VC2 中,有一个“取消”按钮会自行关闭。但是当“取消”按钮被触发时,我无法检测或接收任何回调。 VC2 是一个黑盒子。
视图控制器(称为 VC1)将使用 presentViewController:animated:completion: 方法呈现 VC2。
当 VC2 被解除时,VC1 必须检测哪些选项?
编辑:根据@rory mckinnel 的评论和@NicolasMiari 的回答,我尝试了以下方法:
在 VC2 中:
-(void)cancelButton:(id)sender
{
[self dismissViewControllerAnimated:YES completion:^{
}];
// [super dismissViewControllerAnimated:YES completion:^{
//
// }];
}
在 VC1 中:
//-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
- (void)dismissViewControllerAnimated:(BOOL)flag
completion:(void (^ _Nullable)(void))completion
{
NSLog(@"%s ", __PRETTY_FUNCTION__);
[super dismissViewControllerAnimated:flag completion:completion];
// [self dismissViewControllerAnimated:YES completion:^{
//
// }];
}
但是 VC1 中的 dismissViewControllerAnimated 没有被调用。
【问题讨论】:
-
在VC1中会调用viewWillAppear方法
-
根据文档,呈现控制器负责实际解雇。当被展示的控制器关闭自己时,它会要求展示者为它做这件事。因此,如果您在 VC1 控制器中覆盖
dismissViewControllerAnimated,我相信当您在 VC2 上点击取消时它会被调用。检测解除,然后调用将执行实际解除的超类版本。 -
您可以通过调用
[self.presentingViewController dismissViewControllerAnimated]来测试您的覆盖。可能是内部代码有不同的机制来要求演示者进行解雇。 -
@RoryMcKinnel:使用 self.presentingViewController 在我的实验室 VC2 以及真正的黑匣子中确实有效。如果您将 cmets 放入答案中,那么我将选择它作为答案。谢谢。
-
可以在相关帖子中找到解决方案:stackoverflow.com/a/34571641/3643020
标签: ios uiviewcontroller