Я пишу приложение со 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 .