单击按钮时,如何获取基于视图的表中的按钮行?单击按钮时未选中该行,但我发现如果您在按钮的操作方法中记录sender.superview.superview,我会得到:NSTableRowView:0x1001b3a90 - row:2。因此,该行在日志中,但我不知道如何以编程方式获得它。我在NSTableCellView的子类中有按钮的动作方法。
答案 0 :(得分:9)
-[NSTableView rowForView:]
在其文档中说明了这一点:
这通常需要在NSButton(或NSControl)的action方法中找出应该对其执行的行(和列)。
答案 1 :(得分:1)
我在这里给你一个简单的例子。在这里我在内容视图中添加了一个UIButton。当我点击按钮时,我调用了一个方法,然后我得到了行号并按照我的要求调用
//Adding a button
UIButton *btnBuyer=[UIButton buttonWithType:UIButtonTypeCustom];
btnBuyer.frame=CGRectMake(238, 10, 26, 32);
btnBuyer.tag=indexPath.row;
[btnBuyer setImage:[UIImage imageNamed:@"buyIcon.png"] forState:UIControlStateNormal];
[btnBuyer addTarget:self action:@selector(goBuyTab:)forControlEvents:UIControlEventTouchUpInside];
[cellNew.contentView addSubview:btnBuyer];
当用户点击此时,我从以下方法获得了ID
-(void)goBuyTab:(UIButton *)sender{
NSLog(@"after click buy button function called goBuyTab");
NSLog(@"sender.tag in goBuyTab : %d",sender.tag);
int selectedRow=sender.tag;// This is row number
}
希望这是你所需要的。
答案 2 :(得分:1)
我为Swift 4分享了这段代码。
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
........
but.action = #selector(ViewController.buttonAction)
.........
}
@objc func buttonAction(but: NSButton){
let tablerow: NSTableRowView = but.superview?.superview as! NSTableRowView;
let index = table?.row(for: tablerow);
print("\(index));
}
答案 3 :(得分:0)
在Swift 5.1中-
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if let checkBoxCell = tableView.makeView(withIdentifier:NSUserInterfaceItemIdentifier(rawValue: "<ColumnIdentifier>"), owner: self) as! NSButton? {
checkBoxCell.tag = row;
checkBoxCell.target = self;
checkBoxCell.action = #selector(TableViewService.checkBoxAction)
return checkBoxCell
}
return nil
}
@objc func checkBoxAction(button:NSButton){
print(button.tag);
}
答案 4 :(得分:-1)
- (IBAction)yourMethod:(NSButtonCell *)sender {
NSInteger selected = [yourTableView selectedRow];
NSLog(@"sender sends :%ld", selected);
}
您需要将控制器的插座设置为NSTableView
。