我正在为这个苦苦挣扎,不禁觉得我错过了一些明显的东西!
我有一个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);
}
然而,这并没有真正帮助我,因为当我点击按钮时仍然无法让它工作!呵呵!
答案 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);
}