2011-03-24 2 views
1

요소를 끌 수있는 NSOutlineView (단일 선택 만 지원함)가있는 프로그램이 있습니다. 이러한 요소는 텍스트 또는 파일로 수신해야합니다. 예를 들어, 텍스트 편집기 창에 항목을 놓으면 텍스트를 넣어야하지만 Finder에 항목을 놓으면 파일을 만들어야합니다. 내 윤곽선보기 위에 아무 것도 떨어 뜨리지 않기를 바랄뿐입니다. 이것은 충분히 쉬운 것처럼 보이지만, 어떤 이유로 나는 그것을 작동시키지 못합니다. NSOutlineView 요소가 절름 거리지 않게 유지됩니다.

은 내가 NSOutlineView 드래그를 확인하고 애플에서 예를 드롭, 나는 다음과 같은 방법 (더하기 몇 확실히 관련이없는 사람)를 구현했다 : 나는에서 항목을 드래그 할 때, 그러나

-(BOOL)outlineView:shouldSelectItem: // I don't expect to drag unselectable items 
-(NSArray*)outlineView:namesOfPromisedFilesDroppedAtDestination:forDraggedItems: 
-(BOOL)outlineView:writeItems:toPasteboard: 

을 내 개요보기, 아무 일도 일어나지 않습니다. 대신 커서를 따라 선택을 변경합니다.

마지막 두 메서드에 중단 점을 넣었으므로 절대로 호출되지 않으므로 해당 구현이 바로 문제는 아닙니다.

여기서 분명히 분명한 뭔가를 놓치고 있어야합니다.

또한 이것은 (아직) 문제가되지 않지만 약속 된 파일에 내용을 제공하려면 어떻게해야합니까?

답변

2

나는 어리 석었고 데이터 소스가 아닌 위임자의 메소드를 구현했습니다.이 두 가지는 내 앱에서 구분됩니다. 문제 해결됨!

1

사용자 정의 표보기 셀을 사용하고 있습니까? NSCell의 hitTestForEvent:inRect:ofView: 결과는 끌기 작업을 시작할 수 있는지 여부를 결정합니다. 또한 outlineView:writeItems:toPasteboard:을 호출해야하는지 여부도 결정합니다.

이 메서드는 끌기를 시작하려면 NSCellHitContentArea을 반환하고 선택을 확장하거나 변경하려면 NSCellHitTrackableArea을 반환해야합니다.

표준 텍스트 셀은 셀의 실제 텍스트를 클릭하면 NSCellHitContentArea을 반환하고 텍스트 외부를 클릭하면 NSCellHitTrackableArea을 반환합니다. 그러면 Finder의 테이블보기에 표시되는 드래그 동작이 생성됩니다.

셀의 모든 영역에서 드래그 작업을 시작하려는 경우이 메서드를 재정의하고 NSCellHitContentArea을 항상 반환 할 수 있습니다.

자세한 내용은 Hit Testing을 참조하십시오.

+0

시간 내 주셔서 감사 드리며 나중에 유용 할 수 있습니다. 그러나 나는 오늘 저녁에 내가 기차에서 잘못한 것을 알아 냈다. 어쨌든 당신의 노력에 +1하십시오. – zneak

관련 문제