【发布时间】:2011-06-05 21:53:18
【问题描述】:
直到今天,除了 NSWindow 本身作为 NSDraggingDestination 之外,我还没有机会使用任何其他东西。当使用一个窗口作为一刀切的拖动目标时,NSWindow 会将这些消息传递给它的委托,允许您在不继承 NSWindow 的情况下处理拖放。
docs 说:
虽然 NSDraggingDestination 是 宣布为非正式协议, NSWindow 和 NSView 子类你 创建采用协议只需要 实现那些方法 相关的。 (NSWindow 和 NSView 类提供私人 所有的实现 方法。)窗口对象或 它的代表可以实现这些 方法;然而,代表的 如果执行优先 两者都有实现 地方。
今天,我有一个窗口,上面有两个 NSTextField,我希望它们具有不同的放置行为,并且我不想允许在窗口中的其他任何地方放置。我解释文档的方式,似乎我要么必须继承 NSTextField,要么在窗口的委托上制作一些巨大的意大利面条条件放置处理程序,针对每个视图对 draggingLocation 进行命中检查,以便选择不同的放置区域行为每个字段。
基于 NSWindow-delegate 的集中式放置处理程序方法似乎在您拥有多个放置目标视图的任何情况下都会很繁重。同样,无论哪种情况,子类化方法似乎都很繁琐,因为现在丢弃处理代码存在于视图类中,因此一旦您接受了丢弃,您必须想出一些方法将丢弃的数据编组回模型。 bindings docs 警告您不要尝试通过以编程方式设置 UI 值来驱动绑定。所以现在你也被困住了。
所以我的问题是:“真的!?这些是唯一现成的选择吗?还是我在这里遗漏了一些简单的东西?”
谢谢。
【问题讨论】:
-
您应该修正问题标题中的错字(NSTextView != NSTextField)。
标签: cocoa drag-and-drop cocoa-bindings nsview