1

我想弄清楚如何从表格视图中的字符串拖放到集合视图上。我知道有用于 collectionView 拖放的委托方法,但找不到任何如何实现它们的示例。我设置了收藏视图,它似乎工作正常,但不知道如何完成。

任何帮助表示赞赏。

更新:我正在使用的集合视图设置有 3 个 NSTextFields 和每个集合项的 2 个复选框。在同一个视图中还有一个tableView。表格视图被传递了一个 MutableArray 字符串。我希望能够将字符串值从表视图行拖到集合视图项中的相应文本字段中。

这与将拖放用于集合视图的典型方式不同。

4

1 回答 1

0

我将回答我自己的问题,因为我今天花了很多时间试图弄清楚这一点,很多人都在为这个过程而苦苦挣扎,主要是因为我感觉很糟糕,我整个星期都在向 Stack 社区询问所有这些集合视图问题:

我发现 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 上的教程进行操作;集合视图编程指南,它引导您完成设置集合视图的过程,但它使用绑定。

所以现在关键是设置一个textField子类 //MyNSTextField.h #import @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 拖动代表向上,或者如果您从其他来源拖动,请确保您设置了适当的拖动源代理,并且它应该可以工作。

于 2012-02-03T06:59:11.593 回答