macos – 如何在NSViewController中调用registerForDraggedTypes?

macos – 如何在NSViewController中调用registerForDraggedTypes?,第1张

概述我有一个带有splitview的MainViewController.接下来我有两个viewcontroller来控制splitview中的每个视图.我希望能够在其中一个视图中拖放文件. 但我似乎无法让拖延工作?拖动到视图时文件上没有“加号”,丢弃它也没有做任何事情. 我究竟做错了什么? 首先是这里的MainViewController.m fileViewController = [[FileV 我有一个带有splitvIEw的MainVIEwController.接下来我有两个vIEwcontroller来控制splitvIEw中的每个视图.我希望能够在其中一个视图中拖放文件.

但我似乎无法让拖延工作?拖动到视图时文件上没有“加号”,丢弃它也没有做任何事情.

我究竟做错了什么?

首先是这里的MainVIEwController.m

fileVIEwController = [[fileVIEwController alloc] initWithNibname:@"fileVIEwController" bundle:nil];terminalVIEwController = [[TerminalVIEwController alloc] initWithNibname:@"TerminalVIEwController" bundle:nil];[splitVIEw replaceSubvIEw:[[splitVIEw subvIEws] objectAtIndex:0] with:[fileVIEwController vIEw]];[splitVIEw replaceSubvIEw:[[splitVIEw subvIEws] objectAtIndex:1] with:[terminalVIEwController vIEw]];

接下来,我的代码来处理fileVIEwController中的拖动

@dynamic isHighlighted;- (ID)initWithNibname:(Nsstring *)nibnameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibname:nibnameOrNil bundle:nibBundleOrNil];    if (self) {        NSLog(@"registering");        [self.vIEw registerForDraggedTypes:[NSArray arrayWithObjects: NSfilenamesPboardType,nil]];    }    return self;}- (NSDragOperation)draggingEntered:(ID <NSDraggingInfo>)sender {    NSLog(@"[%@ %@]",NsstringFromClass([self class]),NsstringFromSelector(_cmd));    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 )sender {    [self.vIEw setNeedsdisplay:YES];} // end concludeDragOperation- (BOol)isHighlighted {    return isHighlighted;}- (voID)setHighlighted:(BOol)value {    isHighlighted = value;    [self.vIEw setNeedsdisplay:YES];}- (voID)drawRect:(NSRect)frame {    [self.vIEw drawRect:frame];    if (isHighlighted) {        [NSBezIErPath setDefaultlinewidth:6.0];        [[NScolor keyboardFocusIndicatorcolor] set];        [NSBezIErPath strokeRect:frame];    }}
解决方法 我似乎没有解决它,因为没有人给我任何答案,我通过制作一个NSVIEw子类并将其添加到我的vIEwcontroller这样修复它.

- (ID)initWithNibname:(Nsstring *)nibnameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibname:nibnameOrNil bundle:nibBundleOrNil];    if (self) {        draggable = [[DragVIEw alloc] initWithFrame:CGRectMake(0,500,500)];        [[self vIEw] addSubvIEw:draggable];    }    return self;}
总结

以上是内存溢出为你收集整理的macos – 如何在NSViewController中调用registerForDraggedTypes?全部内容,希望文章能够帮你解决macos – 如何在NSViewController中调用registerForDraggedTypes?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1072298.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存