如何禁用NSTextView上的拖放?

时间:2013-05-10 12:45:56

标签: drag-and-drop nstextview nswindowcontroller nsviewcontroller

我有NSWindowController,其中包含多个NSViewControllers。我希望普遍接受使用NSWindowController类的拖放事件,而不是被其他视图拦截,例如NSTextView(包含在NSViewController

如何告诉NSTextView忽略阻力&放弃事件?

4 个答案:

答案 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 [] }

}