У меня есть NSTableView, и я хочу отключить выбор строки.
NSTableView
Столбцы табличного представления связаны с NSArrayController, и содержимое массива действительно отображается в табличном представлении.
NSArrayController
Как я могу сделать это, просто используя bindings?
bindings
Я думаю, вам нужно использовать TableViewDelegate и реализовать
- (NSIndexSet *)tableView:(NSTableView *)tableView selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes
Пока работают предыдущие ответы, я предпочитаю использовать еще один вариант:
- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex { return NO; }
Я думаю
- (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView { return NO; }
лучше, чем
Swift 4.0
func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool { return false }
Как примечание для потомков ...
Если вы объявите selectionIndexesForProposedSelection, то функция shouldSelectRow будет проигнорирована.На тот случай, если вам интересно, как я это сделал, почему мои правки в shouldSelectRow не дали эффекта ...
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSTableViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/NSTableViewDelegate/tableView:selectionIndexesForProposedSelection:
Использование привязки:
Другой подход заключается в выборе «пусто» в списке флажков, соответствующих «Выделению» в Инспекторе атрибутов представления таблицы.Это не будет выбирать какие-либо строки по умолчанию.
В дополнение к этому, установите для подсветки значение «Нет».
снимок экрана инспектора атрибутов
В случае привязки вы можете связать логическое значение с помощью Enabled. Инспектор привязок
Если значение в примере истинно, оно может быть выбрано, иначе - нет.Таким образом, нам не нужно использовать делегаты только для отключения выбора, когда все остальное выполняется через привязку.