我已经成功地在我的应用程序中实现了一个文件删除功能。应用程序窗口中有几个NSTabView对象,在这些对象上放置不起作用。在窗口的任何其他地方,文件拖放都能正常工作。
我试图让应用程序代表NSTabView,但这没有帮助。
有人为NSTabView设置了不过滤掉删除操作的设置,这样整个窗口就可以对文件删除操作透明了吗?
发布于 2015-08-24 16:24:02
对于一个比olekeh更通用的解决方案,我使它对IB友好,这样您就可以将它连接到符合NSDraggingDestination协议的任何对象。
#import <Cocoa/Cocoa.h>
@interface DropFilesView : NSView
@property (nullable, assign) IBOutlet id<NSDraggingDestination> dropDelegate;
@end
@implementation DropFilesView
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
}
-(void) awakeFromNib {
[self registerForDraggedTypes:
[NSArray arrayWithObjects:NSFilenamesPboardType,
(NSString *)kPasteboardTypeFileURLPromise,kUTTypeData, NSURLPboardType, nil]]; //kUTTypeData
[super awakeFromNib];
}
-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender{
return [self.dropDelegate draggingEntered:sender];
}
- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender {
return [self.dropDelegate performDragOperation:sender];
}
@end发布于 2015-08-21 21:36:44
我找到了解决这个问题的方法!-我把它发到这里给其他可能需要的人。
NSTabView对象对于其每个选项卡都有一个NSTabViwItem。在每一种情况下,都有一个常规的NSView (我用以下代码对其进行子类划分):--代码假定您的AppDelegate中已经有"draggingEntered“和"performDragOperation”,因为这个类只是将这些消息转发给应用程序委托。您还需要将这些方法的声明放在AppDelegate.h中。
// DropFilesView.h
#import <Cocoa/Cocoa.h>
#import "AppDelegate.h"
@interface DropFilesView : NSView
@end以及执行情况:
// DropFilesView.m
#import "DropFilesView.h"
@implementation DropFilesView
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
}
-(void) awakeFromNib {
[self registerForDraggedTypes:
[NSArray arrayWithObjects:NSFilenamesPboardType,
(NSString *)kPasteboardTypeFileURLPromise,kUTTypeData, NSURLPboardType, nil]]; //kUTTypeData
[super awakeFromNib];
}
-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
AppDelegate* del = [AppDelegate sharedAppDelegate];
return [del draggingEntered:sender];
}
- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender {
AppDelegate* del = [AppDelegate sharedAppDelegate];
return [del performDragOperation:sender];
}
@end在Interfacebuilder中,我将所有NSView对象的新类设置为这个新类,该类涵盖了拖放不起作用的区域。
NSImageView和WebView类也可以使用类似的方法。但是,对于最后一个,不要使用超级awakeFromNib来防止对web视图对象的默认拖放处理。
https://stackoverflow.com/questions/32087324
复制相似问题