NSTextField をサブクラス化する非常に単純なクラスを作成して、ドラッグ アンド ドロップの動作をより細かく制御できるようにしましたが、混乱に陥っています。ドラッグ先のapple.developerドキュメントで私が理解していると思うことによると、テキストフィールドの境界に出入りするときにデリゲートを起動できるはずですが、代わりにデリゲートがそうではないということです。何かを textField にドロップしてから、それをドラッグしようとするまで発火します。
NSObject である MyController クラスがあり、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 クラスを空にすることができる理由の 1 つです。
したがって、どんな助けも大歓迎です。