我有一个视图控制器(A),它以模板方式呈现另一个视图控制器(B)作为表单(UIModalPresentationFormSheet)。
现在我想解除视图控制器B,并在安全的情况下尽快呈现另一个(因为在显示或解除其他视图控制器时你无法使用presentModalViewController:
。)
然而,当表单完全消失时,我似乎无法找到任何通知方式。任何解决方案?
答案 0 :(得分:3)
毫无疑问,您已经注意到,当viewDidAppear
控制器被解除时,不会触发旧的UIModalPresentationFormSheet
方法。您可以通过在关闭控制器时调用该方法来模拟viewWillAppear调用,但这不是您需要的。
您可以将新的viewController推送到现有的模态视图控制器的navigationController,而不是呈现第二个模态视图控制器吗?无论如何,这可能会提供更好的用户体验。
或者你可以使用popover吗?
答案 1 :(得分:2)
所以这就是我们所做的。
由于控制表单(B)的视图控制器获取-viewDidDisappear
,我们只需将呈现视图控制器(A)添加为委托,然后我们手动通知在(B)视图控制器上调用-viewDidDisappear
。
委托定义如下所示:
@protocol FormSheetViewControllerDelegate - (void)formSheetViewDidDisappear; @end
我们将一个委托添加到FormSheetViewController:
@interface FormSheetViewController @property (nonatomic, assign) id <FormSheetViewControllerDelegate> @end
我们从FormSheetViewController调用-formSheetViewDidDisappear
:
@implementation FormSheetViewController - (void)viewDidDisappear:(BOOL)animated { [registerViewControllerDelegate registerViewControllerDidDisappear]; } @end
<强> P.S:强> 从iOS 5和块开始,UIViewController有方法
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion您可以使用它来解雇表单视图。