双击Cocoa中的NSTableView行?

我需要我的应用程序打开一个窗口,当用户双击NSTableView的一行。 我有一个困难的时间find信息或例子如何做到这一点。 有人能指出我的方向吗?

看看NSTableView上的-setDoubleAction:方法; 你可以设置一个方法,就像普通的目标 – 行动系统一样,只要双击即可。

在该操作方法中, -clickedRow将会很有用。

将更多的基本信息添加到@JimPuls答案为Cocoa的其他新人的利益。

  1. NSTableView的IBOutlet需要在接口中声明。 我认为在表格的委托中最好这样做。
  2. 表中的IBOutlet需要通过Interface Builder进行连接。 要做到这一点,从声明出口到表格视图的类的IB中拖放。 当你释放你的鼠标时,popup窗口应该出现你在步骤1中声明的sockets的名字。 select那个。
  3. 在@implementation部分的-awakeFromNib方法中,在步骤#1中声明的IBOutlet上调用-setTarget:和-setDoubleAction:并在步骤#2中连接。

这是我的表格视图委托的摘录。 我有我的委托也设置为数据源,所以这就是为什么你会看到NSTableViewDelegate和NSTabeViewDataSource接口相关联。

//接口摘录。

 @interface MyTableViewDelegate : NSObject <NSTableViewDelegate, NSTableViewDataSource> { // This iVar needs to be connected to the table view via the IB. IBOutlet NSTableView *tableOutlet; } @property (assign) IBOutlet NSTableView *tableOutlet; - (void)doubleClick:(id)nid; @end 

//执行摘录。

 @implementation MyTableViewDelegate @synthesize tableOutlet = _tableOutlet; - (void)awakeFromNib { [_tableOutlet setTarget:self]; [_tableOutlet setDoubleAction:@selector(doubleClick:)]; } - (void)doubleClick:(id)object { // This gets called after following steps 1-3. NSInteger rowNumber = [_tableOutlet clickedRow]; // Do something... } 

希望这可以帮助。

正如PR辛格所说的,你可以使用cocoa绑定,你也可以传递selectedObjects。

  1. 在IB中select你的表格视图,然后在“绑定”检查器中设置这两个绑定,如下所示:

     >Double Click Target bind to = Application delegate object (or file owner) model key path = self selector name = myMethod: >Double Click Argument bind to = array controller controller key = selectedObjects selector name = myMethod: 

myMethod被实现为

  - (void)myMethod:(NSArray*)selectedObjects { NSLog(@"%@", selectedObjects); } 

这也logging在这里: https : //developer.apple.com/library/mac/qa/qa1472/_index.html

如果有人寻找一个迅速的2.0版本:这是对我有用。 看起来比Objective C代码容易得多。

 @IBOutlet weak var searchResultTable: NSTableView! override func viewDidLoad() { super.viewDidLoad() searchResultTable.doubleAction = "doubleClickOnResultRow" } func doubleClickOnResultRow() { print("doubleClickOnResultRow \(searchResultTable.clickedRow)") } 

您可以在Interface Builder中连接双击操作。 按住Control键点击你的表格视图(确保你获得了表格视图 ,而不是滚动视图或剪辑视图或表格列)来获得它的连接面板。 find“已发送操作”部分中的“doubleAction”项目。 将其连接到您select的IBAction。

你可以用绑定做同样的事情,首先在.h文件中声明一个mentod

 -(IBAction)openWindow:(id)sender 

在.m文件中执行相同

 -(IBAction)openWindow:(id)sender { //do something here; } 

得到你的表视图存在的那个笔尖,select表视图,并得到属性检查器的倒数第二个选项卡,打开双cicl参数揭示三angular形检查绑定检查狐狸select文件的所有者,模型的关键拍打应该是“自我”,select器名称将是“openWindow:”,与“双击目标”披露的过程相同,这将起作用