在NSTable中获取NSButton的行

时间:2013-07-22 15:38:47

标签: objective-c macos cocoa interface-builder

我正在为这个苦苦挣扎,不禁觉得我错过了一些明显的东西!

我有一个NSTable,其中包含一个表单元格视图,后者又包含一个NSButton。

按钮定义了插座,表格视图定义了插座。

我使用以下代码获取用户点击该按钮时按钮所在行的索引:

- (IBAction)approveButtonInTable:(id)sender {

    NSInteger selected = [self.tweetTableView clickedRow];
    NSLog(@"sender sends :%ld", selected);
}

然而,这总是以-1回答,这对于帮助不大。

我错过了一些非常明显的东西吗?

由于

加雷

修改1

我已经知道如果我在tableview的插座上使用它,这确实有用,使用它:

- (IBAction)tweetTableAction:(id)sender {
    NSInteger selected = [_tweetTableView clickedRow];
    NSLog(@"sender sends :%ld", selected);
}

然而,这并没有真正帮助我,因为当我点击按钮时仍然无法让它工作!呵呵!

3 个答案:

答案 0 :(得分:4)

既然你说你正在使用NSTableCellView,那就告诉我你正在使用基于视图的表。在这种情况下,您想要调用rowForView:,传递按钮。我相信这种方法只适用于这种情况(从未在基于单元格的表上尝试过)。

- (IBAction)approveButtonInTable:(id)sender {
    NSInteger selected = [self.tweetTableView rowForView:sender];
    NSLog(@"sender sends :%ld", selected);
}

答案 1 :(得分:2)

如果有人正在寻找 Swift 3 版本的Jablair回答。

只需实施@IBAction方法。

@IBAction func approveButtonInTable(_ sender: Any) {
    let selectedRow = tweetTableView.row(for: sender as! NSView)
    print("sender sends \(selectedRow)")
 }

答案 2 :(得分:0)

单击该按钮与单击表格行不同。您最好的选择是使用与其在表格中的位置相关的标签填充按钮(可能从100开始),然后使用:

- (IBAction)approveButtonInTable:(id)sender {

    NSInteger selected = [sender tag] - 100;   // or whatever value you decide to start tagging
    NSLog(@"sender sends :%ld", selected);
}