11

单击按钮时,如何在基于视图的表中获取按钮的行?单击按钮时未选择该行,但我发现如果您在按钮的操作方法中记录 sender.superview.superview ,我得到: NSTableRowView: 0x1001b3a90 - row: 2. 所以,该行在日志中,但我不知道如何以编程方式处理它。我在 NSTableCellView 的子类中有按钮的操作方法。

4

5 回答 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 回答