【发布时间】:2020-10-06 00:39:20
【问题描述】:
我有一个视图控制器 (A),它以模态方式将另一个视图控制器 (B) 显示为表单 (UIModalPresentationFormSheet)。
现在我想关闭视图控制器 B,并在安全的情况下尽快呈现另一个(因为您不能在显示或关闭另一个视图控制器时使用 presentModalViewController:。)
但是,当表单完全消失时,我似乎找不到任何通知方式。有什么解决办法吗?
【问题讨论】:
我有一个视图控制器 (A),它以模态方式将另一个视图控制器 (B) 显示为表单 (UIModalPresentationFormSheet)。
现在我想关闭视图控制器 B,并在安全的情况下尽快呈现另一个(因为您不能在显示或关闭另一个视图控制器时使用 presentModalViewController:。)
但是,当表单完全消失时,我似乎找不到任何通知方式。有什么解决办法吗?
【问题讨论】:
毫无疑问,您已经注意到,当 UIModalPresentationFormSheet 控制器被解除时,旧的 viewDidAppear 方法不会被触发。当您关闭控制器时,只需调用该方法即可模拟 viewWillAppear 调用,但这不是您需要的。
除了展示第二个模态视图控制器之外,您可以将新的视图控制器推送到现有的模态视图控制器的导航控制器吗?无论如何,这可能会给用户带来更好的体验。
或者你可以使用弹出框吗?
【讨论】:
这就是我们所做的。
由于控制表单 (B) 的视图控制器确实 获得了 -viewDidDisappear,我们只需将呈现视图控制器 (A) 添加为委托,然后当 @987654322 时我们手动通知它@ 在 (B) 视图控制器上被调用。
委托定义如下所示:
@protocol FormSheetViewControllerDelegate
- (void)formSheetViewDidDisappear;
@end
我们向 FormSheetViewController 添加一个委托:
@interface FormSheetViewController
@property (nonatomic, weak) id <FormSheetViewControllerDelegate> delegate;
@end
我们从 FormSheetViewController 调用-formSheetViewDidDisappear:
@implementation FormSheetViewController
- (void)viewDidDisappear:(BOOL)animated {
[delegate formSheetViewDidDisappear];
}
@end
附注: 从iOS 5 和blocks 开始,UIViewController 有方法
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
您可以使用它来对表单表单视图的关闭做出反应。
【讨论】: