我需要在可可中進行拖放視圖以接受文件夾。我知道它會使用像NSView和可能registerForDraggedTypes:(我仍然不知道如何去使用)。有誰知道如何得到這個工作?拖放文件夾視圖可可
在此先感謝
我需要在可可中進行拖放視圖以接受文件夾。我知道它會使用像NSView和可能registerForDraggedTypes:(我仍然不知道如何去使用)。有誰知道如何得到這個工作?拖放文件夾視圖可可
在此先感謝
大多數時候,你需要的是在拖放文檔,但是特別需要什麼NSFilenamesPboardType。這是一個數組,如果文件路徑。
建立一個叫做DragDropView類的子類的NSView並設置視圖MainMenu.xib是這種類型的(選擇你的觀點,去身份Inspecor和自定義類寫DragDropView)。
爲DragDropView編寫代碼(見下文)並運行它。應該出現一個空的窗口。
將一些文件夾拖到窗口上。你應該得到你的控制檯中寫入的文件夾的路徑。就像是。
2014年2月1日11:18:10.435開始[41767:303]( 「/用戶/鮑勃/桌面/石南動畫」, 「/Users/bob/Desktop/bird.atlas」 )
// DragDropView.h
#import <Cocoa/Cocoa.h>
@interface DragDropView : NSView
@end
// DragDropView.m
#import "DragDropView.h"
@implementation DragDropView {
BOOL isHighlighted;
}
- (void)awakeFromNib {
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
}
- (BOOL)isHighlighted {
return isHighlighted;
}
- (void)setHighlighted:(BOOL)value {
isHighlighted = value;
[self setNeedsDisplay:YES];
}
- (void)drawRect:(NSRect)frame {
[super drawRect:frame];
if (isHighlighted) {
[NSBezierPath setDefaultLineWidth:6.0];
[[NSColor keyboardFocusIndicatorColor] set];
[NSBezierPath strokeRect:frame];
}
}
#pragma mark - Dragging
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
NSPasteboard *pboard = [sender draggingPasteboard];
if ([[pboard types] containsObject:NSFilenamesPboardType]) {
NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType];
for (NSString *path in paths) {
NSError *error = nil;
NSString *utiType = [[NSWorkspace sharedWorkspace]
typeOfFile:path error:&error];
if (![[NSWorkspace sharedWorkspace]
type:utiType conformsToType:(id)kUTTypeFolder]) {
[self setHighlighted:NO];
return NSDragOperationNone;
}
}
}
[self setHighlighted:YES];
return NSDragOperationEvery;
}
- (void)draggingExited:(id <NSDraggingInfo>)sender {
[self setHighlighted:NO];
}
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender {
return YES;
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {
[self setHighlighted:NO];
return YES;
}
- (void)concludeDragOperation:(id<NSDraggingInfo>)sender {
NSArray *files = [[sender draggingPasteboard] propertyListForType:NSFilenamesPboardType];
NSLog(@"%@", files);
}
@end
Swift 3實現:https://gist.github.com/128keaton/e6030ddbcedabe10f1a834cd269f13dc – 2017-01-03 06:09:21
謝謝,我來看看。 – nosedive25 2010-07-09 02:04:39
模糊的問題得到模糊的答案;很高興您有時間爲原創海報撰寫演示課,但不是每個人都會這樣做。試圖在事實發生近四年後羞辱某人,然而,可以說是任何行動中最沒有幫助的...... – 2014-02-01 15:17:56
錯誤,它的字符串:p您可以使用它與'[NSArray arrayWithObject:NSFilenamesPboardType]' – 2016-01-02 09:11:20