【发布时间】:2011-08-19 01:06:14
【问题描述】:
我有一个 NSView 子类,它在 init 方法中注册拖动文件,如下所示:
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
拖放工作非常好,但如果我向这个视图添加一个具有完全相同框架的子视图,它就不再工作了。我的猜测是子视图阻止拖动事件进入超级视图。我可以避免吗?谢谢
另外,我知道我在问两个问题,但我不想为此创建一个新主题:当我拖动时,我的光标不会像其他拖动一样变为“+”号,我怎样才能做到这一点? 再次感谢。
更新: 这是我在 IB 中的设置方式:
DrawView 是我所说的为拖动类型注册的自定义类。而图像视图只是一个子视图,我从媒体部分拖了一个图像...... 如果有帮助,这是我的 DragView 相关代码:
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
return NSDragOperationCopy;
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {
NSPasteboard *pboard;
pboard = [sender draggingPasteboard];
NSArray *list = [pboard propertyListForType:NSFilenamesPboardType];
if ([list count] == 1) {
BOOL isDirectory = NO;
NSString *fileName = [list objectAtIndex:0];
[[NSFileManager defaultManager] fileExistsAtPath:fileName
isDirectory: &isDirectory];
if (isDirectory) {
NSLog(@"AHH YEA");
} else {
NSLog(@"NOO");
}
}
return YES;
}
【问题讨论】:
-
你是如何创建子视图的?我可以通过 IB 或以编程方式创建具有子视图的视图。
-
我在 IB 中设置了视图。我将它的类设置为我上面描述的自定义类。然后在 IB 中,我拖动图像并将其放在该视图中(使其成为子视图)。当我这样做时,拖动停止工作。谢谢。
-
更新了原始问题,提供了更多详细信息。谢谢。
-
看看 Steven 在这个线程上的回答:stackoverflow.com/questions/4782636/…
标签: objective-c cocoa macos drag-and-drop nsview