Get button's row in view based table

后端 未结 5 1651
情深已故
情深已故 2020-12-17 20:34

How do you get the row for a button in a view based table when you click the button? The row is not selected when the button is clicked, but I found that if you log sender.s

相关标签:
5条回答
  • 2020-12-17 20:36

    -[NSTableView rowForView:] says this in its documentation:

    This is typically needed in the action method for an NSButton (or NSControl) to find out what row (and column) the action should be performed on.

    0 讨论(0)
  • 2020-12-17 20:42

    I share this code for 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));
    }
    
    0 讨论(0)
  • 2020-12-17 20:50

    in osx you can use this in your button cell action method in the controller:

    - (IBAction)yourMethod:(NSButtonCell *)sender {
    
    NSInteger selected = [yourTableView selectedRow];
    NSLog(@"sender sends :%ld", selected);
    }
    

    you need to set an outlet from the controller to the NSTableView.

    0 讨论(0)
  • 2020-12-17 20:54

    Here I'm giving you a simple example. In this I'm adding a UIButton in content view. When I clicked on button I call a Method and there I get Row number and call as I required

    //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];
    

    And When User Clicks on this I got Id from the following method

    -(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
    }
    

    Hope this is what you required.

    0 讨论(0)
  • 2020-12-17 20:56

    In 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);
        }
    
    0 讨论(0)
提交回复
热议问题