1

У меня есть NSWindowController, который содержит несколько NSViewControllers. Я хотел бы универсально принимать события перетаскивания с классом NSWindowController и не быть перехвачены другими видами таких как NSTextView (содержится в NSViewController)Как отключить перетаскивание на NSTextView?

Как я могу сказать NSTextView игнорировать событие перетаскивания &?

ответ

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

Я думаю, что достаточно просто реализовать приемлемыеDragTypes внутри подкласса. – palob

2

Достаточно подклассифицировать NSTextView и переопределить геттер для его свойства acceptableDragTypes, нет необходимости в unregisterDraggedTypes. В Swift:

override var acceptableDragTypes : [String] { 
    return [String]() 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^