2011-11-24 3 views
2

NSView에서 파생 된 사용자 정의보기가있는 응용 프로그램이 있습니다. 이 뷰에는 NSView에서 파생 된 몇 가지 사용자 정의 하위 뷰가 있습니다.부모보기로 끌어 오기 및 놓기 이벤트 전달

URL을 뷰에 놓을 수있는 끌어서 놓기 동작을 구현하려고합니다. 모든 것이 이미 기본보기에서 작동합니다.

그래서 실제로는 자식 뷰와 부모 뷰 클래스에서 드래그 동작 핸들러를 구현해야합니다. 사실, 모든 자식 뷰에 전체 처리 코드를 복사하여 드래그 이벤트를 허용하기를 원하지 않습니다. 그래서 모든 드래그 이벤트를 상위 뷰로 전달하는 것이 가장 좋은 방법이라고 생각했습니다.

어떻게 든 가능합니까 ?? 어쩌면 이걸 어떻게 응답자 사슬로 설정할 수 있을지 모르겠다.

모든 팁을 높이 평가합니다 !! 미리 감사드립니다. 파단 만 표시하기 위해 사용되며, 사용자 상호 작용을 필요로하지 않는 경우

답변

3

내가보기에 떨어 뜨린 것이나 그 중 어떤 것이 뷰에 의해 처리되기를 원하는 비슷한 문제에 직면했지만 전화가 거기에 도달하지 못했습니다.

은 몇 가지 조사 후 내가 가장 도움이 답을 발견 https://stackoverflow.com/a/7389711/327471 뷰가 그것으로 그 정보를 전달해야 어떤 드래그 이벤트를 받도록 등록되지 않은 본질적 경우

자동으로 부모보기입니다. 그래서 내 경우에는이 같은 뭔가 결국 : 물론

NSArray *subviews = [self.view subviews]; 
for (NSView *aSubview in subviews) { 
    [aSubview unregisterDraggedTypes]; 
} 

당신보다 더 정확하게, 단지 특정 종류 나 어떤 매개 변수를 원하는의 서브 클래스를 확인해야 할 수 있습니다. 하지만 궁극적으로 핵심은 드래그 된 유형의 하위 뷰 문제를 등록 취소하는 것이 었습니다.

이 정보가 도움이되기를 바랍니다.

+0

이것은 내가 필요로하는 정확하게 본다! 오늘 밤 그것을 시도 할 것이다! 당신의 타이밍은 대단합니다. 해결해야 할 다른 문제들이 있었고 어제 마지막으로 끝냈습니다. 그래서 나는이 정확한 주제에 관해 곧 새로운 질문을 던졌을 것이다. 감사. 나의 날을 만들었다!! – guitarflow

+0

주위를 시도한 후에 나는 그것이 작동하지 않는다고 생각했다 ... 내가 알기 전까지 내 사용자 정의보기에는 전체보기의 오버레이로 음영 이미지를 표시하는 NSImageView가 포함되어있다. 이것은 모든 나의 끌기 사건을 먹었다. 'unregisterDraggedType'는 내 문제를 해결했습니다. 대단히 감사합니다 !! – guitarflow

2

, 당신과 같이 부모 뷰에서 -hitTest:을 재정의 할 수

- (NSView *)hitTest:(NSPoint)aPoint 
{ 
    NSView* hitView = [super hitTest:aPoint]; 
    if(hitView) 
     return self; 
    return nil; 
} 

이 상위 뷰는 모든 마우스 이벤트를받을 수 있습니다.

+0

불행히도 내 자식보기도 마우스 클릭 이벤트를 수신하고 있습니다. 다른 생각? – guitarflow

+0

부모보기에서 mouseUp :을 재정의하고 하위보기 중 하나의 rect 내에있는 경우 해당보기를 전파하여 마우스 클릭 이벤트를 별도로 전파 할 수 있습니다. 매우 우아하지 않다 :) –

0

아마도 더 좋은 방법 일 수 있지만 드래그 프로토콜 구현을 뷰에서 직접가 아니라 카테고리에 넣고 각 뷰에 해당 카테고리를 포함시킬 수 있습니다.

관련 문제