我要回答我的問題,因爲我花了不少時間今天試圖弄清楚這一點,很多人用這個程序鬥爭,主要是因爲我覺得不好我不斷地問堆棧社區所有這些集合視圖問題所有周:
我發現的NSTextField的默認行爲實際上允許的下降,如果它是焦點。問題是我需要適當的NSTextField來自動對焦鼠標事件。所以事情結果是,我甚至不需要NSCollectionView拖放代表。我需要NSTableView拖拽委託,我需要繼承NSTextField並在其中實現鼠標事件(放置)委託。
所以我對原collectionViewItem類是這樣的:
//someClass.h
@interface SomeClass : NSObject{
IBOutlet NSTextField *field1_;
IBOutlet NSTextField *field2_;
IBOutlet NSTextField *field3_;
IBOutlet NSButton *chkBox1_;
IBOutlet NSButton *chkBox2_;
}
@porperty(readwrite, copy) NSTextField *filed1_;
屬性爲所有5個網點進行結合而訂立的。如果您按照Mac OSX Dev Library上的教程進行操作,集合視圖編程指南「中,它引導您完成設置集合視圖的過程,但它使用綁定。
所以,現在的關鍵是要建立一個文本框的子類 //MyNSTextField.h #進口 @interface MyNSTextField:{的NSTextField
//mouse positioning
unsigned long last_;
}
//MyNSTextField.m
#import "MtTextField.h"
@implementation
-(void)dealloc{
[super dealloc];
}
-(void)awakeFromNib{
//register for dragged types
//any other nib stuff
}
//three required mouse events
-(unsigned long)draggingEntered:(id<NSDraggingInfo>)sender{
//this forces the textfield to focus before drop
[self.window makeFirstResponder: self];
NSPasebord *pBoard;
self->last_ = DragOperationNone;
pBoard = [sender draggingPastboard];
return self->last_;
}
-(unsigned long)draggingUpdated:(id<NSDraggingInfo>)sender{
return self->last_;
}
-(void)draggingExited:sender{
if([sender draggingSource] != self){
self->last = NSDragOperationNone;
}
}
} //結束類
現在只是回到原始類並將textField插口的名稱從NSTextField更改爲MyNSTextField,並在集合視圖中選擇每個文本字段並在檢查器中爲其指定新的類名稱,並且只要您使用tableview拖動設置的代表,或者如果你正在從中拖出我其他來源,確保你有適當的拖動源代表設置,它應該工作。