1

这个问题适用于 OSX 应用程序,但同样的原则也适用于 iOS。

我在情节提要上有一个 NSWindowController 具有以下设置。

A. MainWindowController 有子视图:

1) 带有按钮的工具栏

2) 一个SubVcA拥有自己内容的viewController

B. SubVcASubVcBviewController 的视图作为它的内容

C. SubVcB有功能ButtonPressed

在此处输入图像描述

目标是SubVcB通过单击工具栏按钮来触发 viewController 中的按钮按下功能。

我一直在这样做的方法是从 mainWindowController 到目标 viewController 的方法实现链,如下所示:

MainWindowController call method on SubVcA
-->SubVcA call method on SubVcB
---> SubVcB call method buttonPressed

这很有效,但是当控制器堆栈达到大约 4 级时它会变得混乱。当 SubVC(B) 必须将数据发送回 MainWindowController 时,它也会变得更加混乱,因为为了进行封装(如不让 SubVC(B) 拥有太多关于其调用 viewControllers 的信息),我必须在链上实现委托方法。当您有多个工具栏按钮时,它会变得更加混乱。

现在......我刚刚开始搞乱情节提要上的 firstResponder 项目

在此处输入图像描述

而且我意识到它会弹出一个巨大的列表,其中包含在整个应用程序中实现的所有方法-(IBAction)

所以我现在的问题是:为了减少视图层次结构上下的方法混乱,使用 firstResponder 将 MainWindowController 的工具栏按钮操作直接连接到 SubVc(B) viewController 中的 buttonPressed 方法是否是一个好的应用程序设计故事板上的对象?

此外,还有其他设计模式可以减少混乱吗?

4

1 回答 1

2

使用第一响应者允许以零为目标的动作将响应者链向上渗透到可以处理它的任何人,这正是第一响应者的用途。这显然比您自己传递信息要少得多。

于 2015-08-21T23:29:51.627 回答