Как определить данные для ячейки таблицы (NSTableView), в которой произошло нажатие кнопки?

Чтобы определить данные для ячейки таблицы (NSTableView), в которой произошло нажатие кнопки, вам понадобятся следующие шаги:

1. Настройте делегата и источник данных для таблицы.
- Назначьте делегата и источник данных для таблицы. Наиболее удобный способ сделать это - использовать Interface Builder.
- Убедитесь, что ваш класс делегата и источника данных соответствуют протоколам NSTableViewDelegate и NSTableViewDataSource соответственно.

2. Реализуйте метод делегата таблицы, который будет вызываться при нажатии на кнопку в ячейке:

   func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
       // Ваш код для создания ячейки таблицы
       let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("CustomCell"), owner: self) as! CustomCell
       
       // Установите селектор для кнопки в ячейке
       cell.button.target = self
       cell.button.action = #selector(buttonClicked(_:))
       
       // Установите tag для кнопки, чтобы идентифицировать ячейку
       cell.button.tag = row
       
       return cell
   }

3. Реализуйте метод обработчика нажатия кнопки:

   @objc func buttonClicked(_ sender: NSButton) {
       let row = sender.tag
       
       // Получите данные для ячейки таблицы
       if let data = dataSourceArray[row] {
           // Обработайте данные ячейки таблицы, в которой произошло нажатие кнопки
           // Например, вы можете отобразить данные в другом месте или выполнить какие-либо операции с данными
       }
   }

В методе tableView(_:viewFor:row:) устанавливается селектор и тег для кнопки в ячейке. Тег равен значению row, которое указывает на индекс нажатой ячейки в исходном массиве данных таблицы. В методе buttonClicked(_:), используя переданный тег, вы можете получить данные для соответствующей ячейки и произвести необходимые действия с этими данными.

Обратите внимание, что вам нужно указать идентификатор ячейки (CustomCell) в Interface Builder или создать ячейку программно, инициализировав ее с помощью своего собственного класса, который наследуется от NSTableCellView.