1

通常,正确处理拖动的主要责任在哪里——在 NSView 或 NSViewController 中。

拖动操作的钩子都包含在 NSView 中,所以看起来 NSView 是自然的地方。此外,视图需要发挥一些作用,因为视图知道东西在哪里,所以它自然是拖动结束的专家。

但拖动通常与文档间或进程间通信有关——尤其是关于将文件从 Finder 拖动到文档中。拖动必然会导致模型的更改或添加。这就是控制器的工作。

最后,无论我们是在视图还是控制器上,我们通常会添加一堆方法来处理拖入过程,然后接收数据。人们是简单地将方法添加到视图或控制器,还是将它们转发到策略对象?

4

1 回答 1

1

NSView 是拖动处理的“前线”,因为正如您所指出的,“视图知道事物在哪里,因此它自然是拖动结束位置的专家。” 我不能代表所有人,但我看到的模式是,就像按钮这样的简单视图,当视图接收到“用户意图”时,它会将其传达给控制器对象。

简单的 NSControls 使用目标/动作范例来执行此操作,该范例可以连接到 IB 中。这里一种简单的方法可能是为您的视图指定一个目标/动作,当拖动操作进行到需要触发该动作的时候,视图可以这样做。视图需要传达给控制器的任何状态理论上都可以通过在sender动作参数中传递给控制器​​的视图来访问。

自然,目标/动作范式是相当有限的,但这里的重点是视图可以跟踪拖动,直到建立了“用户意图单元”,它可以被分派给控制器进行处理。确切的机制将取决于每个个体所需行为的需求。

于 2013-02-14T03:01:42.400 回答