如何向作为 UIViewController 子类的 parentViewController 发送消息?

Posted

技术标签:

【中文标题】如何向作为 UIViewController 子类的 parentViewController 发送消息?【英文标题】:How to send message to a parentViewController that is a subclass of UIViewController? 【发布时间】:2011-05-16 16:52:13 【问题描述】:

我有一个 UIViewController (MyViewController) 和另一个视图控制器,我通过 MyViewController 模态呈现(称为 SecondViewController)。我希望能够使用

从 SecondViewController 向 MyViewController 发送消息
[self.parentViewController hideSecondViewController];

但是由于 parentViewController 被定义为 UIViewController,并且 hideSecondViewController 不是 UIViewController 的方法,所以我收到警告说“UIViewController 可能无法响应 'hideSecondViewController'”。它工作正常,因为它可以在程序期间成功发送消息,但是由于我在 MyViewController 中#import SecondViewController,我无法在 SecondViewController 中#import MyViewController。有什么办法吗?

【问题讨论】:

【参考方案1】:

何时关闭模式 视图控制器,首选 方法是让父视图 控制器进行解雇。其他 话,同一个视图控制器 展示了模态视图控制器 也应该负责 尽可能解雇它。 虽然有几种技术 用于通知父视图控制器 它应该解除它的模态 赠送的孩子,首选 技术是委托

在基于委托的模型中,视图 控制器以模态方式呈现 必须为其定义一个协议 委托实施。协议 定义由 模态视图控制器响应 特定的动作,例如在 完成按钮。那么代表是 负责实施这些 方法并提供适当的 回复。在父视图的情况下 控制器作为代表 它的模态孩子,响应将 包括关闭子视图 适当的控制器。

在View Controller Programming Guide for ios了解更多信息。


PS:

自从我 #import SecondViewController 在 MyViewController 中,我不能 #import MyViewController 在 SecondViewController。

要解决循环依赖问题,您可以使用forward declaration。

【讨论】:

【参考方案2】:

按照 albertamg 的建议重新设计您的架构会更好,但这应该可行:

[自己 dismissModalViewControllerAnimated:YES];

你可以在展示和展示的视图控制器上调用dismiss,它会做同样的事情。

【讨论】:

以上是关于如何向作为 UIViewController 子类的 parentViewController 发送消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用单个故事板uiviewcontroller为多个子类

如何继承 UIViewController 的子类

我可以使用传递不同 UIViewController 子类的相同方法吗?

如何在许多子类中使用 UITableViewDelegate 子类化 UIViewController

如何从 UIView 子类调用 UIViewController?

如何通过将类名传递给方法来创建子类 UIViewController?