Ответ 1
Все зависит от того, что вы хотите сделать.
Кнопка "Показать исходные свойства" в Версии, например, является подклассом NSButton, потому что в основном нам нужно стандартное поведение кнопок с нашим собственным взглядом. Один из способов подкласса кнопки - просто реализовать собственный метод -drawRect: (NSRect) rect в подклассе NSButton, но мы решили придерживаться того, как NSButton реализован в Cocoa, что означает, что большая часть рисунка выполняется с помощью кнопки, поэтому реализация выглядит следующим образом:
В подклассе NSButton:
+ (Class) cellClass
{
return [OurButtonCell class];
}
- (void)drawRect:(NSRect)rect
{
// first get the cell to draw inside our bounds
// then draw a focus ring if that appropriate
}
В подклассе NSButtonCell (OurButtonCell):
- (void)drawInteriorWithFrame: (NSRect) rect inView: (NSView *) controlView
{
// a bunch of drawing code
}
Временная шкала в версиях - это фактически WebView, страница, которую вы видите в ней, использует javascript для обхода заголовков, на которые вы нажимаете.
Правило большого пальца, которое я использую для начала, с помощью настраиваемого элемента управления:
- Чтобы настроить внешний вид стандартного элемента управления Cocoa:
- подкласс соответствующего элемента управления (например, NSButton и NSButtonCell)
- придерживаться так близко, чтобы иметь смысл, как реализован элемент управления по умолчанию (например, в кнопочной кнопке, начинайте с существующего метода attribitedTitle, чтобы нарисовать заголовок кнопки, если вы не всегда хотите рисовать с теми же атрибутами, независимо от того, какой набор в IB или если вам нужно рисовать с различными атрибутами на основе состояния, например, с кнопкой пробного истечения в главном окне Versions)
- Создание полностью нового элемента пользовательского интерфейса:
- подкласс NSView и реализовать практически все манипуляции с мышью и ключевыми словами (в представлении нет необходимости повторять "hitTest:" ) и рисовать код самостоятельно.
- Представить нечто сложное, произвольной высоты, но не таблицу:
- Посмотрите, можете ли вы сделать это в HTML, CSS и JS и представить его в WebView. Интернет отлично подходит для выкладки текста, поэтому, если вы можете разгрузить эту ответственность за свой WebView, это может стать огромной экономией боли в области шеи.
Рекомендуемое чтение о том, как нарисовать материал в собственных собственных методах рисования: Cocoa Руководство по рисованию
Настройка внешнего вида, например, NSTableView - это совсем другая чашка чая, благодаря сложности табличного представления, которое может происходить повсюду. Вы будете использовать свои собственные ячейки для некоторых вещей, которые вы хотите сделать в таблице, но вам придется изменить способ выделения строк в подклассе самого объекта NSTableView. Посмотрите, например, исходный код iTableView на сайт Мэтта Геммелла для четкого примера того, где рисовать.
Наконец, я думаю, что предложение Abizer пойти проверить код BWToolkit - отличная идея. Сначала это может быть немного подавляющим, но если вы можете прочитать и понять этот код, вам не составит труда реализовать свои собственные пользовательские представления и элементы управления.