Перетащите кнопку в OSX 10.8 SDK / target-c
Я начал использовать цель-ссегодня для того, чтобы разработать приложение для OSX (Mountain Lion). У меня есть несколько кнопок, которые я хотел бы перетащить в другой объект, например в текстовое поле. Я следовал инструкциям на сайте разработчика Apple, но у меня не получилось заставить работать перетаскивающую часть (например, перетаскивающая часть работает, я могу перетащить файл из поиска в текстовый файл и показать его путь).
Я начал с создания подкласса NSButton:@interface mp3OCDDraggableButton : NSButton
и реализовал методы, как описано в:https://developer.apple.com/library/mac/#samplecode/CocoaDragAndDrop/Introduction/Intro.html
но дело в том, чтобы двигаться!
Я помещаю некоторые сообщения журнала в mouseDown :, которые я вижу, но не могу ли я заменить их 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