2012-02-02 42 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拖动设置的代表,或者如果你正在从中拖出我其他来源,确保你有适当的拖动源代表设置,它应该工作。