我创建了一个非常简单的类,它继承了NSTextField,因此我可以更好地控制拖放行为,但是我遇到了混乱。根据我认为我在Dragging目的地的apple.developer文档中理解的内容,当我进入或退出文本字段的边界时,我应该能够让代表触发,但我得到的是代表们直到我把一些东西扔进textField然后我试着把它拖出来。
我有一个MyController类,它是一个NSObject,我有一个类型为NSTextField的CustomFields类;控制器类中没有任何内容。
以下是代码:
// CustomFields.h
// Drags
//
#import <AppKit/AppKit.h>
#import <Foundation/foundation.h>
@interface CustomFields : NSTextField{
NSString *tempStorage_;
unsigned long last_;
}
@property(readwrite, retain) NSString *tempStorage;
@end
//
// CustomFields.m
// Drags
//
#import "CustomFields.h"
@implementation CustomFields
@synthesize tempStorage = tempStorage_;
- (id)init{
if (self) {
self = [super init];
}
return self;
}
-(void)dealloc{
[self.tempStorage release ];
[super release];
}
-(void)awakeFromNib{
NSLog(@"Awake from nib called");
self.tempStorage = @"";
self->last_ = 0;
[self setBackgroundColor:[NSColor lightGrayColor]];
[self registerForDraggedTypes:[NSArray arrayWithObjects: NSPasteboardTypeString , NSPasteboardTypeString, nil]];
[super awakeFromNib];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
NSLog(@"Inside dragging entered");
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender
{
NSLog(@" draggingUpdated called");
return NSDragOperationCopy;
}
- (void)draggingExited:(id <NSDraggingInfo>)sender
{
NSLog(@"Inside dragging exited");
}
@end
//
// MyController.h
// Drags
//
#import <Foundation/Foundation.h>
@class CustomFields;
@interface MyController : NSObject{
IBOutlet NSButton *myButton_;
IBOutlet CustomFields *field1_;
IBOutlet CustomFields *field2_;
}
@end
//
// MyController.m
// Drags
//
#import "MyController.h"
#import "CustomFields.h"
@implementation MyController
@end
我确保将正确的类分配给IB中的字段(CustomFields)并连接它们。如您所见,目前我很乐意在适当的时间获取日志声明。我也尝试将MyController类更改为NSViewController和NSView,这样我就可以在那里尝试registerForDraggedTypes。这没有任何帮助,我认为我不应该期待它。我认为我想要的行为应该局限于CustomFields类,这是MyController类暂时为空的原因之一。
所以任何帮助都非常赞赏。