Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSButton in NSTableCellView: How to find desired objectValue?

I have a view-based NSTableView that is populated through bindings. My textFields & imageViews are bound to the NSTableCellView's objectValue's properties.

If I want to have an edit/info button in my NSTableCellView:

  1. Who should be the target of the button's action?

  2. How would the target get the objectValue that is associated with the cell that the button is in?

I'd ultimately like to show a popover/sheet based on the objectValue.

like image 495
Patrick Avatar asked Nov 29 '22 03:11

Patrick


2 Answers

Your controller class can be the target. To get the object value:

- (IBAction)showPopover:(id)sender {
    NSButton *button = (NSButton *)sender;
    id representedObject = [(NSTableCellView *)[button superview] objectValue];
}

Or, use a subclass of NSTableCellView, make the cell view the target of the button's action, and call [self objectValue] to get the object.

like image 37
paulmelnikow Avatar answered Jan 02 '23 13:01

paulmelnikow


I found an additional answer: The Answer above seems to assume you're using bindings on your table view. Since I'm kind of a noob I found a way to get the button inside the table view cell.

- (IBAction)getCellButton:(id)sender {
     int row = [xmlTable rowForView:sender];
}

This way when you click on the button inside the row, you don't have to have the row selected. It will return the int value of the row to match up with a datasource in an array without bindings.

like image 62
user580340 Avatar answered Jan 02 '23 12:01

user580340