на SWIFT 4.1
Вы устанавливаете метод doubleAction объекта TableView внутри вашего кода для выполнения функции @objc с помощью #selector (nameOfYourFunction)
Внутри этой функции вы вызываете segue.
Вы можете связать ваше новое окно с исходным окном в InterfaceBuilder (не с объектом NSTableView, а с самим объектом ViewController.
Затем выполните все настройки для нового окна при подготовке к переходу:
Хорошо, сначала в Интерфейсном Разработчике:
Конечно, укажите идентификатор для этого сеанса:
Далее, внутри нашего первого контроллера вида (где находится табличное представление) код:
//We use this function: prepare for segue
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
// check if we are referring to the actual segue we want
if segue.identifier?.rawValue == "segueToYourNewWindow" {
// now create a reference to that new window
let yourNewWindow = segue.destinationController as! newWindowViewController
// now change variables inside that view controller code, remember that the objects might fail if they are not yet visible to the user so first set up the variables or call them using the main thread, up to your design.
yourNewWindow.selectedRowVariable = thisTableView.clickedRow
}
Затем нам нужна функция для выполнения перехода по двойному щелчку табличного представления, эта функция вызывается с помощью #selector и поэтому должна быть видимой для Objective C (даже если мы программируем в Swift), мы просто запускаем функция с @Objc вот и все.
@objc func doubleClickOnResultRow() {
//beware of double-clicking also triggers this function when no rows is selected with the selectedRow being -1
if (thisTableView.selectedRow > -1 ) {
performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "segueToYourNewWindow"), sender: nil)
}
}
Наконец, мы устанавливаем эту функцию для метода doubleAction TableView в части начальной настройки нашего кода следующим образом:
override func viewDidLoad() {
super.viewDidLoad()
thisTableView.doubleAction = #selector(doubleClickOnResultRow)
}