1

我创建了一个非常简单的类,它继承了 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 类暂时可以为空的原因之一。

因此,非常感谢任何帮助。

4

0 回答 0