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:
Например, но в остальном у вас впереди много работы, особенно в области редактирования.
В долгосрочной перспективе, тем не менее, это лучший и единственный способ получить индивидуальный выбор ячейки.