单击按钮时,如何在基于视图的表中获取按钮的行?单击按钮时未选择该行,但我发现如果您在按钮的操作方法中记录 sender.superview.superview ,我得到: NSTableRowView: 0x1001b3a90 - row: 2. 所以,该行在日志中,但我不知道如何以编程方式处理它。我在 NSTableCellView 的子类中有按钮的操作方法。
问问题
4233 次
5 回答
10
-[NSTableView rowForView:]
在其文档中这样说:
这通常在 NSButton(或 NSControl)的操作方法中需要,以找出应该在哪一行(和列)上执行操作。
于 2012-04-18T09:59:19.817 回答
2
在斯威夫特 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);
}
于 2019-10-02T22:08:20.093 回答
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
}
希望这是您所需要的。
于 2012-04-18T10:09:07.300 回答
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));
}
于 2018-02-16T12:14:51.417 回答
-1
在 osx 中,您可以在控制器的按钮单元操作方法中使用它:
- (IBAction)yourMethod:(NSButtonCell *)sender {
NSInteger selected = [yourTableView selectedRow];
NSLog(@"sender sends :%ld", selected);
}
您需要从控制器设置一个插座到NSTableView
.
于 2013-03-06T21:11:10.867 回答