视图或控制器是否应负责拖动处理?

时间:2013-02-13 16:29:33

标签: cocoa oop model-view-controller nsview nsviewcontroller

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

拖动操作挂钩都包含在NSView中,所以看起来NSView是自然的地方。此外,视图需要扮演某些角色,因为视图知道事物的位置,因此自然而然就是拖拽意图结束的专家。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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