我有NSWindowController
,其中包含多个NSViewControllers
。我希望普遍接受使用NSWindowController类的拖放事件,而不是被其他视图拦截,例如NSTextView
(包含在NSViewController
)
如何告诉NSTextView
忽略阻力&放弃事件?
答案 0 :(得分:6)
我发现有两件事需要跳过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处理。
答案 1 :(得分:4)
为NSTextView创建子类并覆盖其acceptableDragTypes
属性的getter就足够了,不需要unregisterDraggedTypes
。在斯威夫特:
override var acceptableDragTypes : [String] {
return [String]()
}
答案 2 :(得分:0)
轻微更新。
import Cocoa
class MyTextView : NSTextView {
// don't accept any drag types into the text view
override var acceptableDragTypes : [NSPasteboard.PasteboardType] {
return [NSPasteboard.PasteboardType]()
}
}
答案 3 :(得分:0)
雨燕5
import Cocoa
class NSTextViewNoDrop: NSTextView {
override var acceptableDragTypes: [NSPasteboard.PasteboardType] { return [] }
}