但我似乎无法让拖延工作?拖动到视图时文件上没有“加号”,丢弃它也没有做任何事情.
我究竟做错了什么?
首先是这里的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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)