Позвольте пользователю выбрать одну ячейку в NSTableView - PullRequest
0 голосов
/ 08 июня 2018

Я пишу приложение со Swift, которое использует NSTableView в качестве основного интерфейса.Приложение представляет информацию из очень большого массива, подобно электронной таблице.Как я могу позволить пользователю выбрать одну ячейку из NSTableView?

Я прочитал https://stackoverflow.com/a/20807563/2771733, в котором говорится:
It sounds like you're trying to make a spreadsheet. That's not what a table view is. Но реального решения, кроме «Вы», не предусмотрено.Лучше всего реализовать пользовательское представление "- что кажется большой работой и далеко за пределами моих текущих знаний.

Одна идея, с которой я столкнулся, состояла в том, чтобы вообще отключить выбор и предоставить свой собственный обработчик мыши, но я не былне могу отключить выбор.Даже если снять флажки со всех полей в разделе «Выбор» в Инспекторе атрибутов для представления таблицы, пользователь все равно может выбрать (выделить) строку.И это мешало бы моему собственному коду дескриптора мыши.

Итак, есть ли способ (ab) использовать NSTableView в качестве электронной таблицы?Или какие-то другие намеки, как я могу позволить пользователю просто выбрать одну ячейку вместо целой строки?

Обновление: Ответ на возможный дублирующий вопрос простоодно предложение, рекомендующее NSCollectionView для этой задачи, но не дает никаких причин, почему.Особенно моя задача представить «информацию из очень большого массива, как электронную таблицу», не решена.Например, протокол NSCollectionViewDataSource заставляет вас реализовать collectionView:numberOfItemsInSection:.Но понятие (по сути одномерного) «количества элементов» не вписывается в идею электронной таблицы с ее двумерными данными.То же самое верно для collectionView:itemForRepresentedObjectAtIndexPath:, где путь индекса дает вам the item index within that section.Опять же, мне приходится иметь дело с одномерными индексами для двумерного источника.

То, что я ищу, - это нативное решение для довольно простых видов сетки, которые предоставляют другие наборы инструментов GUI, такие как FLTK Fl_Table или wxWidget wxGrid .

1 Ответ

0 голосов
/ 08 июня 2018

Вот что я знаю.

Чтобы отключить выбор строки NSTableView, используйте любой из этих двух методов в NSTableViewDelegate:

optional func tableView(_ tableView: NSTableView, selectionIndexesForProposedSelection proposedSelectionIndexes: IndexSet) -> IndexSet
optional func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool

И чтобы выбрать только одну ячейку, вы можете создать подкласс NSTableView и переопределить

func validateProposedFirstResponder(_ responder: NSResponder, for event: NSEvent?) -> Bool

, чтобы определить, какое представление или элемент управления в таблице должны реагировать на входящие события.Вы можете прочитать документ Apple для получения более подробной информации об этом.

И после того, как ваша ячейка сможет обрабатывать входящие события, «код дескриптора мыши» в указанной вами ячейке может быть обработан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...