Из документации NSTableView.doubleAction
:
Свойства clickedRow и clickedColumn позволяют определить, в какой строке и столбце произошел двойной щелчок, или если вместо строки двойной произошел щелчок в заголовке столбца.
@objc func tableViewDoubleAction(sender: NSTableView) {
let row = sender.clickedRow
Из документации clickedRow
:
Индекс строки, по которой пользователь щелкнул, чтобы вызвать сообщение действия , Возвращает -1, если пользователь щелкнул мышью в области представления таблицы, не занятой строками таблицы.
if row >= 0 {
NSTableView
имеет метод rect(ofRow:)
:
Возвращает прямоугольник, содержащий строку с указанным индексом.
let rowRect = sender.rect(ofRow: row)
Используйте этот прямоугольник для позиционирования поповера
popover.show(relativeTo: rowRect, of: sender, preferredEdge: NSRectEdge.maxY)
Соберите все вместе:
@objc func tableViewDoubleAction(sender: NSTableView) {
let row = sender.clickedRow
if row >= 0 {
// create the popover
let rowRect = sender.rect(ofRow: row)
popover.show(relativeTo: rowRect, of: sender, preferredEdge: NSRectEdge.maxY)
}
}