我创建了一个非常简单的类,它继承了 NSTextField 的子类,因此我可以更好地控制拖放行为,但我遇到了困惑。根据我认为我在 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 类暂时可以为空的原因之一。
因此,非常感谢任何帮助。