双击Cocoa中的NSTableView行?
我需要我的应用程序打开一个窗口,当用户双击NSTableView
的一行。 我有一个困难的时间find信息或例子如何做到这一点。 有人能指出我的方向吗?
看看NSTableView上的-setDoubleAction:
方法; 你可以设置一个方法,就像普通的目标 – 行动系统一样,只要双击即可。
在该操作方法中, -clickedRow
将会很有用。
将更多的基本信息添加到@JimPuls答案为Cocoa的其他新人的利益。
- NSTableView的IBOutlet需要在接口中声明。 我认为在表格的委托中最好这样做。
- 表中的IBOutlet需要通过Interface Builder进行连接。 要做到这一点,从声明出口到表格视图的类的IB中拖放。 当你释放你的鼠标时,popup窗口应该出现你在步骤1中声明的sockets的名字。 select那个。
- 在@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。
-
在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:”,与“双击目标”披露的过程相同,这将起作用