我有一个NSWindowController
包含几个NSViewControllers
. 我想普遍接受带有 NSWindowController 类的拖放事件,并且不会被其他视图拦截,例如NSTextView
(包含在 a 中NSViewController
)
我怎么知道NSTextView
忽略拖放事件?
我有一个NSWindowController
包含几个NSViewControllers
. 我想普遍接受带有 NSWindowController 类的拖放事件,并且不会被其他视图拦截,例如NSTextView
(包含在 a 中NSViewController
)
我怎么知道NSTextView
忽略拖放事件?
我发现有两件事需要跳过过去NSTextView
对拖放事件的拦截。
在NSViewController
包含您的NSTextView
:
- (void)awakeFromNib
{
[self noDragInView:self.view];
}
- (void)noDragInView:(NSView *)view
{
for (NSView *subview in view.subviews)
{
[subview unregisterDraggedTypes];
if (subview.subviews.count) [self noDragInView:subview];
}
}
现在将您的子类化NSTextView
并添加此方法:
- (NSArray *)acceptableDragTypes
{
return nil;
}
现在NSTextView
应该正确地忽略拖放事件并让它由 NSWindow 处理。
将 NSTextView 子类化并覆盖其acceptableDragTypes
属性的 getter 就足够了,无需unregisterDraggedTypes
. 在斯威夫特:
override var acceptableDragTypes : [String] {
return [String]()
}
斯威夫特 5
import Cocoa
class NSTextViewNoDrop: NSTextView {
override var acceptableDragTypes: [NSPasteboard.PasteboardType] { return [] }
}
轻微更新。
import Cocoa
class MyTextView : NSTextView {
// don't accept any drag types into the text view
override var acceptableDragTypes : [NSPasteboard.PasteboardType] {
return [NSPasteboard.PasteboardType]()
}
}