7 ответов:
посмотри
-setDoubleAction:метод на NSTableView; вы можете установить, что к методу, который будет вызван так же, как обычная система целевого действия, но на двойной щелчок.в этом методе действий,
-clickedRowбудет полезно.
добавление дополнительной базовой информации в @JimPuls ответ в интересах других новичков в Cocoa.
- IBOutlet к NSTableView должен быть объявлен в интерфейсе. Я предположил, что это предпочтительнее сделать в делегате таблицы.
- IBOutlet к таблице должен быть подключен через Interface Builder. Для этого Ctrl-Drag & Drop в IB из класса, который объявляет выход в табличное представление. Когда вы отпустите кнопку мыши, всплывающее окно должно появиться с имя розетки, объявленной на шаге №1. Выбирать тот.
- в разделе @implementation в методе-awakeFromNib вызовите-setTarget: и-setDoubleAction: на IBOutlet, объявленном на шаге #1 и подключенном на Шаге #2.
вот выдержка из моего делегата представления таблицы. У меня есть делегат, также настроенный как источник данных, поэтому вы увидите интерфейсы nstableviewdelegate и nstabeviewdatasource, связанные с ним.
// интерфейс выписка.
@interface MyTableViewDelegate : NSObject <NSTableViewDelegate, NSTableViewDataSource> { // This iVar needs to be connected to the table view via the IB. IBOutlet NSTableView *tableOutlet; } @property (assign) IBOutlet NSTableView *tableOutlet; - (void)doubleClick:(id)nid; @end/ / отрывок из реализации.
@implementation MyTableViewDelegate @synthesize tableOutlet = _tableOutlet; - (void)awakeFromNib { [_tableOutlet setTarget:self]; [_tableOutlet setDoubleAction:@selector(doubleClick:)]; } - (void)doubleClick:(id)object { // This gets called after following steps 1-3. NSInteger rowNumber = [_tableOutlet clickedRow]; // Do something... }надеюсь, что это помогает.
Как сказал PR Singh, вы можете использовать привязки cocoa, вы также можете передавать выбранные объекты.
выберите представление таблицы В IB, затем в инспекторе Привязок установите эти две привязки следующим образом:
>Double Click Target bind to = Application delegate object (or file owner) model key path = self selector name = myMethod: >Double Click Argument bind to = array controller controller key = selectedObjects selector name = myMethod:где myMethod реализован как
- (void)myMethod:(NSArray*)selectedObjects { NSLog(@"%@", selectedObjects); }это также задокументировано здесь: https://developer.apple.com/library/mac/qa/qa1472/_index.html
Если кто-то ищет версию swift 2.0: Это то, что работает для меня. Кажется, гораздо проще, чем объективный C-код.
@IBOutlet weak var searchResultTable: NSTableView! override func viewDidLoad() { super.viewDidLoad() searchResultTable.doubleAction = "doubleClickOnResultRow" } func doubleClickOnResultRow() { print("doubleClickOnResultRow \(searchResultTable.clickedRow)") }
вы можете подключить действие двойного щелчка в Interface Builder. Управление-щелкните представление таблицы (убедитесь, что вы получаете таблица, а не вид прокрутки или вид клипа или столбец таблицы), чтобы получить его панель соединений. Найдите пункт "doubleAction" в разделе "отправленные действия". Подключите его к IBAction по вашему выбору.
Вы можете сделать то же самое с привязками, прежде всего объявить один mentod в .файл H
-(IBAction)openWindow:(id)senderin .M файл реализовать то же самое
-(IBAction)openWindow:(id)sender { //do something here; }добрался до того пера, где присутствует ваше представление таблицы, выберите представление таблицы и получил вторую последнюю вкладку инспектора атрибутов, откройте двойной cicl аргумент раскрытия треугольника проверьте привязку, чтобы проверить владельца файла fox select, ключ модели pat должен быть "self", имя селектора будет " openWindow:", тот же процесс сделать с " двойным щелчком мыши цель " раскрытие информации, Это будет работать
на SWIFT 4.1 Вы устанавливаете метод doubleAction объекта TableView внутри вашего кода для выполнения функции @objc с помощью # selector (nameOfYourFunction)
внутри этой функции вы вызываете segue. Вы можете связать свое новое окно с исходным окном на InterfaceBuilder (не с объектом NSTableView, а с фактическим объектом ViewController.
затем выполните все настройки для нового окна на prepare for segue:
хорошо сначала на интерфейсе Строитель:
конечно, дайте идентификатор этому сегменту:
далее, внутри нашего первого контроллера вида (где вид таблицы) код:
//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 }Затем нам нужна функция для выполнения segue на двойном щелчке таблицы, эта функция вызывается с помощью селектора #и поэтому должна быть видна для 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) }


Comments