2012-02-02 102 views
1

我想弄清楚如何執行拖放和字符串表視圖拖放到一個集合視圖的簡單例子。我知道有用於collectionView拖放的委託方法,但找不到如何實現它們的任何示例。我有我的收藏視圖設置,它似乎工作正常,但不知道如何完成。Consise與NSCollectionView拖工作拖放

任何幫助表示讚賞。

更新:集合視圖設置,我有工作有3個NSTextFields併爲每個集合項目2個複選框。在同一視圖中還有一個tableView。表視圖傳遞一個字符串的MutableArray。我希望能夠將表視圖行中的字符串值拖動到集合視圖項中的相應textField中。

這是典型的方式拖拽不同,降用於收集意見。

回答

0

我要回答我的問題,因爲我花了不少時間今天試圖弄清楚這一點,很多人用這個程序鬥爭,主要是因爲我覺得不好我不斷地問堆棧社區所有這些集合視圖問題所有周:

我發現的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拖動設置的代表,或者如果你正在從中拖出我其他來源,確保你有適當的拖動源代表設置,它應該工作。