Question

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.

Was it helpful?

Solution

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top