오늘까지 NSWindow 자체 이외의 다른 것을 NSDraggingDestination으로 사용할 기회가 없었습니다. 한 크기의 모든 드래그 대상으로 창을 사용할 때 NSWindow는 해당 메시지를 대리자에게 전달하여 NSWindow를 서브 클래 싱하지 않고 드롭을 처리 할 수있게합니다.코코아 NSTextField 드래그 앤 드롭에는 서브 클래스가 필요합니다 ... 정말요?
는 docs 말 : NSDraggingDestination 비공식 프로토콜로 선언 하지만
이, 당신이 프로토콜을 채택하도록 만들 NSWindow 표시 및 NSView의 서브 클래스는 관련되어 그 메소드를 구현하면된다. NSWindow와 NSView 클래스는 모든 메서드에 대해 전용 구현을 제공합니다. 해당 창 개체 또는 대리자가이 메서드를 구현할 수 있습니다. 그러나 구현에있는 경우 구현이있는 경우 위임자의 구현이 우선합니다.
오늘 저는 두 개의 NSTextField가있는 창을 가지며, 다른 드롭 동작을 사용하기를 원했고 다른 창에서는 드롭을 허용하지 않았습니다. 내가 워드 프로세서를 해석하는 방식으로, NSTextField를 하위 클래스로 만들거나, 다른 드롭 영역 동작을 선택하기 위해 각 뷰에 대해 draggingLocation을 히트 - 체크하는 윈도우 위임자에 거대한 스파게티 조건부 드롭 핸들러를 만드는 것으로 보인다. 각 필드.
중앙 집중식 NSWindow-delegate 기반 드롭 처리기 접근 방식은 드롭 대상 뷰를 소수 이상 사용하지 않는 경우에 부담 스러울 것처럼 보입니다. 마찬가지로, 하위 클래스 화 접근법은 사례에 관계없이 번거로운 것처럼 보입니다. 이제는 드롭 처리 코드가 뷰 클래스에 있기 때문에 드롭을 승인하면 삭제 된 데이터를 모델로 다시 마샬링하는 몇 가지 방법을 생각해 내야합니다. bindings docs은 프로그래밍 방식으로 UI 값을 설정하여 바인딩을 유도하려고한다는 경고를합니다. 그래서 지금 너는 그것의 주위에 당신의 방법 뒤를 작동하는 붙어있어.
내 질문은 : "정말요? 그 중 유일하게 쉽게 사용할 수있는 옵션입니까? 아니면 여기에 뭔가 간단하게 빠져 있습니까?"
감사합니다.
질문 제목에 오타를 수정해야합니다 (NSTextView! = NSTextField). – NSGod