1

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 つです。

したがって、どんな助けも大歓迎です。

4

0 に答える 0