4

我正在努力解决这个问题,不禁觉得我错过了一些明显的东西!

我有一个 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);
}

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

4

3 回答 3

4

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

- (IBAction)approveButtonInTable:(id)sender {
    NSInteger selected = [self.tweetTableView rowForView:sender];
    NSLog(@"sender sends :%ld", selected);
}
于 2013-07-22T16:12:08.513 回答
3

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

只需实现@IBAction 方法。

@IBAction func approveButtonInTable(_ sender: Any) {
    let selectedRow = tweetTableView.row(for: sender as! NSView)
    print("sender sends \(selectedRow)")
 }
于 2017-04-02T15:29:00.123 回答
0

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

- (IBAction)approveButtonInTable:(id)sender {

    NSInteger selected = [sender tag] - 100;   // or whatever value you decide to start tagging
    NSLog(@"sender sends :%ld", selected);
}
于 2013-07-22T15:45:24.220 回答