Как реализовать боковую панель, подобную Mail / iTunes / Finder / и т. Д., В Cocoa / IB?

Я думаю, что название в значительной степени говорит обо всем ... Я хочу реализовать интерфейс, аналогичный стандартной боковой панели OS X, используемой во всех вышеупомянутых программах, и мне интересно, есть ли у кого-нибудь мысли о простейшем способе чтобы сделать это, а именно о том, какой вид использовать для левой панели выбора. На самом деле я не думаю, что мне даже нужен иерархический компонент, как в приложениях для Apple, мне просто нужен красивый плоский список вариантов, который определяет, что показано на правой панели.

Очевидное начало - вертикальное разделение макета, но кроме этого я не совсем уверен, куда идти. Представление коллекции только с одним столбцом или что-то в этом роде?


person Lawrence Johnston    schedule 27.10.2008    source источник


Ответы (2)


Я сделал несколько приложений, использующих аналогичную настройку.

Обычно я использую NSSplitView с одним столбцом NSTableView на левой панели. Не забудьте отключить заголовки и сделать так, чтобы они отображались в стиле «Исходный код».

Если вам нужны треугольники раскрытия, тогда вы захотите использовать NSOutlineView вместо NSTableView, но, по крайней мере, для первого раза я бы придерживался простого NSTableView.

Я также использую шаблон, чтобы сделать NSTableView немного короче, чем NSSplitView, и иметь кнопки внизу (добавить, удалить и т. Д.). Обычно я строю программу на основе Core Data, поэтому их легко подключить к методам создания / удаления объектов, а затем привязать NSTableView к массиву объектов.

person Matthew Schinckel    schedule 27.10.2008

Прямая поддержка такого рода вещей была добавлена ​​в Leopard. Это называется «исходный список».

См. примечания к выпуску AppKit. Найдите в документе NSTableViewSelectionHighlightStyleSourceList.

Или перетащите представление таблицы и выберите Highlight: Source List в Интерфейсном Разработчике.

person Ken    schedule 28.10.2008
comment
Вы также захотите реализовать метод outlineView: isGroupItem: delegate, чтобы возвращать YES для строк, которые имеют заголовки заголовков с заглавными буквами. - person Brian Webster; 28.10.2008