NSOutlineViewDataSource
을 구현하여 Finder로 드래그 할 때 파일 시스템에 존재하지 않는 디렉토리를 드래그하는 방법은 무엇입니까? 나는 수 많은 문서를 수색하고 검색하여 읽었지만, 작동하는 가치있는 것을 찾는 데는 큰 어려움을 겪었다. 필자는 파일 시스템과 같은 트리를 관리하는 사용자 지정 데이터 소스를 사용하며 모든 항목은 해당 경로를 추적하는 클래스의 인스턴스입니다. 개요보기에서 파일 및 디렉토리를 Finder로 드래그 할 수 있기를 바랍니다.NSOutlineView는 디렉토리로 약속 함
나는이 :
- (BOOL)outlineView:(NSOutlineView *)outlineView
writeItems:(NSArray *)items
toPasteboard:(NSPasteboard *)pasteboard
{
NSMutableArray *types = [NSMutableArray array];
for (JOItemInfo *itemInfo in items) {
NSString *extension = itemInfo.name.pathExtension;
if (extension.length > 0) [types addObject:extension];
}
[pasteboard declareTypes:@[(__bridge_transfer NSString *)kPasteboardTypeFileURLPromise]
owner:self];
[pasteboard setPropertyList:types
forType:(__bridge_transfer NSString *)kPasteboardTypeFileURLPromise];
DDLogInfo(@"Wrote types %@ to pasteboard %@ for key %@",
types,
pasteboard,
(__bridge_transfer NSString *)kPasteboardTypeFileURLPromise);
return YES;
}
, 지정된 경로의 내부 항목을 기록 -outlineView:namesOfPromisedFilesDroppedAtDestination:forDraggedItems:
의 구현. 이것은 Finder로 항목을 드래그 할 수 있다는 점에서 작동하지만, 아무 것도하지 않으면 아무 일도 일어나지 않고 -...namesOfPromisedFilesDropped...
메서드도 호출되지 않습니다. 또한
[self.outlineView setDraggingDestinationFeedbackStyle:NSTableViewDraggingDestinationFeedbackStyleRegular];
[self.outlineView setDraggingSourceOperationMask:NSDragOperationNone forLocal:YES];
[self.outlineView setDraggingSourceOperationMask:NSDragOperationCopy forLocal:NO];
이 내 -awakeFromNib
에 있습니다. if (extension.length > 0) ...
은 어딘가에서 발견 된 예제를 기반으로했지만 날짜가 있기 때문에 문서에서 확장 프로그램을 반환한다고 나와 있으므로 적절하다고 생각합니다. 개인적으로이 전체 영역에 대한 문서가 부족하다는 것을 알았습니다. 특히 NSOutlineView
과 관련하여. 감사!