NSTableView: создание "перекрывающихся" строк
Цель
У меня есть NSTableView в моем приложении, и я хотел бы нарисовать "перекрывающиеся" строки, чтобы создать эффект "соединения", как в Automator.app:
Что я пробую
Подход, который я рассматриваю, заключается в использовании NSTableView -(NSRect)frameOfCellAtColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex
метод увеличения Y-начала координат всех строк после первого. Мой tableView основан на представлении и не использует автоматическое размещение.
Мой вопрос: это правильный путь для достижения этого эффекта? Кажется "опасным" иметь tableView для рисования строк с перекрывающимися фреймами, и я не могу понять, приведет ли это к куче дополнительного пустого пространства в нижней части tableView (потому что tableView не принимает перекрывающиеся области учитывается при расчете его общей высоты; он просто использует сумму значения rowHeight для каждой строки.)
Кто-нибудь знает, есть ли другой, канонический способ добиться эффекта от Automator tableView?
1 ответ
Как предложил Патрик Гоули, я думаю, что вы должны притворяться, рисуя точку соединения как часть фона или разделителя табличного представления.
Пример Apple HoverTableDemo иллюстрирует некоторые из техник, и видео 120-й сессии WWDC 2011 "Просмотр на основе NSTableView от базового до расширенного" описывает их более подробно.
Я думаю, вы бы установили представление таблицы intercellSpacing
для размещения размера изображения точки подключения. Вы бы установили gridStyleMask
включать NSTableViewSolidHorizontalGridLineMask
,
Вы бы использовали пользовательский подкласс NSTableRowView
сделать пользовательский рисунок фона и разделителей (между рядами). Вы бы переопределить -drawBackgroundInRect:
а также -drawSeparatorInRect:
для тех.
Вы бы использовали пользовательский подкласс NSTableView
сделать пользовательское рисование сетки за концом строк, которое может быть стрелкой внизу последней строки, если вы хотите. Вы бы переопределить -drawGridInClipRect:
сделать это.