如何在表单(UIModalPresentationFormSheet)消失时收到通知?

时间:2011-04-27 09:28:44

标签: ios ipad

我有一个视图控制器(A),它以模板方式呈现另一个视图控制器(B)作为表单(UIModalPresentationFormSheet)。

现在我想解除视图控制器B,并在安全的情况下尽快呈现另一个(因为在显示或解除其他视图控制器时你无法使用presentModalViewController:。)

然而,当表单完全消失时,我似乎无法找到任何通知方式。任何解决方案?

2 个答案:

答案 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
您可以使用它来解雇表单视图。