当用户双击一行中的一行时,我需要我的应用程序打开一个窗口NSTableView
.我在寻找有关如何实现这一目标的信息或示例时遇到了一些困难.任何人都能指出我正确的方向吗?
看看-setDoubleAction:
NSTableView 上的方法; 你可以将它设置为一个方法,就像普通的目标 - 动作系统一样,但是双击一下.
在那个动作方法中,-clickedRow
将是有用的.
将更多基本信息添加到@JimPuls答案,以便其他新人可以获益.
需要在接口中声明NSTableView的IBOutlet.我认为最好在表的委托中这样做.
需要通过Interface Builder连接到表的IBOutlet.要在IB中执行Ctrl-Drag&Drop,从声明出口的类到表视图.释放鼠标时,弹出窗口应显示您在步骤1中声明的插座名称.选择那个.
在@implementation部分的-awakeFromNib方法中,在步骤#1中声明的IBOutlet上调用-setTarget:和-setDoubleAction:并在步骤#2中连接.
这是我的表视图委托的摘录.我的代理也设置为数据源,这就是为什么你会看到与它相关的NSTableViewDelegate和NSTabeViewDataSource接口.
//界面摘录.
@interface MyTableViewDelegate : NSObject{ // 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 Singh所说,你可以使用cocoa绑定,你也可以传递selectedObjects.
在IB中选择表视图,然后在Bindings检查器中设置这两个绑定,如下所示:
>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); }
这也记录在这里:https: //developer.apple.com/library/mac/qa/qa1472/_index.html
如果有人寻找swift 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键并单击表视图(确保获取表视图,而不是滚动视图或剪辑视图或表列)以获取其连接面板.在"已发送操作"部分中找到"doubleAction"项.将其连接到您选择的IBAction.