拖动一个按钮,我开始使用Objective-C的今天为了开发OSX(山狮)的应用程序。 我有一堆按钮,我想将它们拖入其他对象,例如文本字段。我跟着苹果的开发网站上的教程,但我无法得到拖动部分工作(拖放部分工作,例如,我可以从查找器拖动文件到文本文件并显示其路径)。在OSX 10.8 SDK/Objective-C的
我开始通过创建NSButton子类: @interface mp3OCDDraggableButton : NSButton
,并在描述实现的方法: https://developer.apple.com/library/mac/#samplecode/CocoaDragAndDrop/Introduction/Intro.html
但事行得动!
我把鼠标按下一些日志消息:,我可以看到,但如果我用的mouseDragged取代它 - 这是否告诉我什么?
任何人都可以发布这个功能的简单例子吗?我找不到任何工作:\
非常感谢提前!
这是我迄今为止可拖动按钮的代码。几乎和本教程中一样。
//myDraggableButton.h
@interface myDraggableButton : NSButton <NSDraggingSource, NSPasteboardItemDataProvider>
@end
和
//myDraggableButton.m
#import "myDraggableButton.h"
@implementation myDraggableButton
- (void)mouseDown:(NSEvent *)theEvent:(NSEvent*)event
{
NSLog(@"mouseDown");
NSPasteboardItem *pbItem = [NSPasteboardItem new];
[pbItem setDataProvider:self forTypes:[NSArray arrayWithObjects:NSPasteboardTypeString, nil]];
NSDraggingItem *dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter:pbItem];
NSRect draggingRect = self.bounds;
[dragItem setDraggingFrame:draggingRect contents:[self image]];
NSDraggingSession *draggingSession = [self beginDraggingSessionWithItems:[NSArray arrayWithObject:dragItem] event:event source:self];
draggingSession.animatesToStartingPositionsOnCancelOrFail = YES;
draggingSession.draggingFormation = NSDraggingFormationNone;
}
- (NSDragOperation)draggingSession:(NSDraggingSession *)session sourceOperationMaskForDraggingContext:(NSDraggingContext)context
{
switch (context) {
case NSDraggingContextOutsideApplication:
return NSDragOperationCopy;
case NSDraggingContextWithinApplication:
default:
return NSDragOperationCopy;
break;
}
}
- (BOOL)acceptsFirstMouse:(NSEvent *)event
{
return YES;
}
- (void)pasteboard:(NSPasteboard *)sender item:(NSPasteboardItem *)item provideDataForType:(NSString *)type
{
if ([type compare: NSPasteboardTypeTIFF] == NSOrderedSame) {
[sender setData:[[self image] TIFFRepresentation] forType:NSPasteboardTypeTIFF];
} else if ([type compare: NSPasteboardTypePDF] == NSOrderedSame) {
[sender setData:[self dataWithPDFInsideRect:[self bounds]] forType:NSPasteboardTypePDF];
}
}
@end
请发表您的代码。不知道自己写了什么,几乎不可能知道从哪里开始。 –
你还没有实现'mouseDown:'方法。你已经实现的事件处理器方法是'mouseDown ::',它带有两个参数,你标记为'theEvent'和'event'的变量。没有什么会给你发送这样的信息,所以这个方法永远不会被调用。相反,你会收到一个'mouseDown:'消息(带有一个参数),但是你没有实现响应它的方法。删除“'theEvent:(NSEvent *)'”部分(留下“mouseDown:(NSEvent *)event'”)来解决这个问题。 –