NSTableView: выбор нередактируемых клеток, а не строк

Я пробовал многочисленные комбинации предложенных опций из других постов, но я не могу получить NSTableView на основе ячеек, заполненный нередактируемым NSTextFieldCell, чтобы выбрать CELL, а не строку.

Я пробовал:

    [[col dataCell] setEditable:NO];
    [[col dataCell] setSelectable:YES];

    [col setEditable:YES];

и попробовал делегатов:

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex;

а также

- (BOOL)shouldFocusCell:(NSCell *)cell atColumn:(NSInteger)column row:(NSInteger)row;

Причина, по которой можно разрешить выбор ячейки (а не редактировать текст), заключается в том, что я позволяю пользователю дважды щелкнуть ячейку для выполнения функции навигации. Двойной щелчок отлично работает, но пользователь должен видеть, что один щелчок (или даже первый щелчок) выбирает ячейку. Но все, что я получаю, - это выбор строки, и даже если делегат запрещает это, выбор ячейки отсутствует.

Это единственный способ сделать это, чтобы заставить ячейку нарисовать фон в выделенном цветом? (кажется хакерским).

Кстати, выбор столбца тоже разрешен. Это в настоящее время работает.

У кого-нибудь есть опыт решения этой проблемы? Или какие-то мудрые догадки?

Стивен

1 ответ

Решение

Похоже, вы пытаетесь сделать электронную таблицу. Это не то, что табличное представление.

Табличное представление - это список элементов, по одному на строку, показывающий один или несколько аспектов каждого элемента, по одному на столбец.

В этом контексте редко имеет смысл выбирать, но не редактировать только одно свойство одного элемента. Для этого могут быть варианты использования (может быть удобно иметь возможность выбирать и копировать, например, только название трека в iTunes), но это не то, что нужно NSTableView и NSOutlineView.

Электронная таблица - это нечто совсем другое. Каждая клетка равноправна с любой другой; ни одна ось не обязательно подчинена другой. Электронная таблица может использоваться в качестве таблицы (например, предмет, цена, количество, промежуточный итог), но она не привязана к парадигме свойств элементов в NSTableView.

API NSTableView подтверждает это. Обратите внимание, что табличное представление имеет selectedRowIndexes а также selectedColumnIndexes, но нет способа перечислить столбец, пары строк, которые бы идентифицировали выбранные отдельные ячейки.

Вам лучше всего реализовать пользовательский вид. Вы, вероятно, преуспели бы, чтобы эмулировать протокол источника данных NSTableView - вы могли бы иметь spreadsheetView:objectValueForColumnIndex:rowIndex:Например, но в остальном у вас впереди много работы, особенно в области редактирования.

В долгосрочной перспективе, тем не менее, это лучший и единственный способ получить индивидуальный выбор ячейки.

Другие вопросы по тегам