1

NSViewControllers을 포함하는 NSWindowController이 있습니다. 나는 NSTextViewNSTextView에서 끌어서 놓기를 비활성화하려면 어떻게합니까?

어떻게 드래그 & 놓기 이벤트를 무시 NSTextView을 알 수 있습니다 (A NSViewController에 포함)와 같은 보편적 NSWindowController 클래스와 드래그 앤 드롭 이벤트를 수용하고 다른 뷰에 의해 차단되지 하시겠습니까?

답변

6

드래그 앤 드롭 이벤트를 가로 채기 위해 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가 정상적으로 드래그를 무시하고 이벤트를 삭제해야하고 수를 떠나 NSViewController에서

NSTextView 포함 NSWindow에서 처리합니다.

+1

나는 서브 클래스의 내부에 acceptableDragTypes를 구현하는 것으로 충분하다고 생각합니다. – palob

2

NSTextView를 서브 클래스 화하고 해당 acceptableDragTypes 속성에 대해 getter를 재정의하는 것으로 충분합니다 (unregisterDraggedTypes 필요 없음). Swift에서 :

override var acceptableDragTypes : [String] { 
    return [String]() 
} 
관련 문제