在基于视图的表中获取按钮的行

时间:2012-04-18 04:33:36

标签: objective-c cocoa nstableview

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

5 个答案:

答案 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)

在osx中​​,您可以在控制器中的按钮单元格操作方法中使用它:

- (IBAction)yourMethod:(NSButtonCell *)sender {

NSInteger selected = [yourTableView selectedRow];
NSLog(@"sender sends :%ld", selected);
}

您需要将控制器的插座设置为NSTableView