Mac os文件拖動支持锨用,是在NSView
層級別進行監(jiān)聽。
所以第一步寫Window
下的View
實現(xiàn)隘谣。
直接貼代碼
@protocol ReadFileViewDelegate <NSObject>
///接收單個文件
- (void)receivedFileUrl:(NSURL *)fileUrl;
///接收到多個文件
- (void)receivedFileUrlList:(NSArray< NSURL *> *)fileUrls;
@end
@interface ReadFileView : NSView
@property (weak, nonatomic) IBOutlet id<ReadFileViewDelegate> delegate;
@end
@implementation ReadFileView
//MARK: - life cycle
- (id)initWithFrame:(NSRect)frame{
self = [super initWithFrame:frame];
if (self) {
//注冊文件拖動事件
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSPasteboardTypeFileURL, nil]];
}
return self;
}
- (void)awakeFromNib {
[super awakeFromNib];
//注冊文件拖動事件
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSPasteboardTypeFileURL, nil]];
}
- (void)dealloc {
[self unregisterDraggedTypes];
}
//MARK: - private methods
//當文件被拖動到界面觸發(fā)
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
NSPasteboard *pboard;
NSDragOperation sourceDragMask;
sourceDragMask = [sender draggingSourceOperationMask];
pboard = [sender draggingPasteboard];
if ( [[pboard types] containsObject:NSPasteboardTypeFileURL] ) {
if (sourceDragMask & NSDragOperationLink) {
return NSDragOperationLink;//拖動變成箭頭
} else if (sourceDragMask & NSDragOperationCopy) {
return NSDragOperationCopy;//拖動會變成+號
}
}
return NSDragOperationNone;
}
//當文件在界面中放手
-(BOOL)prepareForDragOperation:(id<NSDraggingInfo>)sender{
NSPasteboard *zPasteboard = [sender draggingPasteboard];
// 判斷是否是單文件
if (zPasteboard.pasteboardItems.count <= 1) {
NSURL *url = [NSURL URLFromPasteboard:zPasteboard];
if (url && self.delegate) {
[self.delegate receivedFileUrl:url];
}
} else {
//多文件
NSArray *list = [zPasteboard propertyListForType:NSFilenamesPboardType];
NSMutableArray *urlList = [NSMutableArray array];
for (NSString *str in list) {
NSURL *url = [NSURL fileURLWithPath:str];
[urlList addObject:url];
}
if (urlList.count && self.delegate) {
[self.delegate receivedFileUrlList:urlList];
}
}
return YES;
}
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
// Drawing code here.
}
@end
讀取文件的絕對路勁需要轉換成NSURL
獲取path
即可增拥。
NSURL *url = [NSURL URLFromPasteboard:zPasteboard];
NSLog(@"%@",[url path]);
文件讀取的方法,可以使用NSFileManager
讀取文件和文件信息寻歧。