从模态视图控制器调用方法

Posted

技术标签:

【中文标题】从模态视图控制器调用方法【英文标题】:Call method from Modal View Controller 【发布时间】:2009-11-04 18:53:29 【问题描述】:

我有一个视图控制器,当点击某个按钮时,它会呈现一个模态视图。在关闭模态视图并重新显示下面的原始视图后,我想要调用一个刷新方法。如何从ModalViewController 调用OriginalViewController 中的refresh: 方法?

我知道如果我在 -viewDidAppear 中执行此操作会有效,但我只希望它在模式视图关闭时发生,而不是每次都发生。

【问题讨论】:

【参考方案1】:

正如您在View Controller Programming Guide 中看到的,推荐的方式是使用委托。

您如何做取决于您,但标准的方法是定义一个协议,例如:

@protocol RecipeAddDelegate <NSObject>
- (void)modalViewControllerDismissed:(ModalViewController *)modalViewController;
@end

然后在您的OriginalViewController 上,您可以实现该方法,并在模态视图控制器被解除时采取行动:

- (void)modalViewControllerDismissed:(ModalViewController *)modalViewController 
   [self refresh]; // or anything you want to do

作为附加评论,我链接的指南建议您不应该从模式本身而是从打开它的控制器中关闭模式。在示例中,他们创建的委托协议略有不同,因此它有方法让原始控制器了解模态控制器所做的操作,并能够决定何时关闭它。

【讨论】:

链接已损坏,新链接为:developer.apple.com/library/ios/#featuredarticles/… 什么是“RecipeAddDelegate”? “OriginalViewController”和“ModalViewController”去哪儿了?谁有实际ANSWERS原始问题的示例代码。实际代码。【参考方案2】:

查看 View Controller Programming Guide,特别是 section on dismissing a modal view。

OriginalViewController 应该有一个协议方法,当它完成时由 ModalViewController 调用。 OriginalViewControllers 应该负责关闭模态视图并对其自身执行所需的任何任务,例如刷新自身。

【讨论】:

以上是关于从模态视图控制器调用方法的主要内容,如果未能解决你的问题,请参考以下文章

从模态视图或推送视图调用父方法到presentingViewController

从弹出框控制器调用模态视图的方法

模态视图控制器不调用呈现视图控制器的dismissModalViewControllerAnimated:方法

在 iOS 的子视图控制器中调用方法

视图控制器调用模态视图

在模态视图被解除后,父视图控制器中是不是有一个委托被调用?