Это намного проще, чем можно подумать. Я тоже отправился на поиски чего-то похожего для моего приложения.
Приложение Real App Store:
Мой App Store похож на:
Нет неуважения к INAppStoreWindow, это очень хорошая реализация и надежная. Единственный недостаток, который я увидел из этого, был то, что было много кода для рисования наряду с жестко заданными настройками для цветов TitleBar, которые Apple может настроить в любое время.
Так вот как я это сделал:
A) Создайте стандартное окно с полями заголовка, «Закрыть», «Свернуть», «Тень», «Изменить размер», «Полный экран» - «Главное окно».
Примечание: вам не нужно текстурированное окно, и вы не должны устанавливать заголовок
B) Затем добавьте стандартную панель инструментов со следующими настройками:
- Icon Only
- Отображается при запуске - ON
- Настраиваемый - OFF
- Разделитель - ВКЛ.
- Размер - Обычный
Удалите все элементы панели инструментов и добавьте только их в следующем порядке
NSSegmentControl (51 x 24) - | Гибкое пространство | - NSSearchField (150 x 25)
C) В вашем представлении содержимого прямо под панелью инструментов добавьте NSButton обычного размера, например, так:
- Ограничено - ВЫКЛ.
- Прозрачный - ВЫКЛ.
- Заголовок -
- Изображение -
- Положение - текст под кнопкой
- Шрифт - System Small 11
Хорошо, пока довольно легко, правда?!
В вашем контроллере окна или в приложении-делегате ....
настроить IBOutlet (s) на ваши NSButton (s)
Примечание: не забудьте подключить свой IBOutlet в конструкторе интерфейсов
Хорошо, не пугайтесь, теперь мы должны написать немного кода:
В пробуждении из Nib или windowDidLoad ....
- Получить суперпредставление представлений контента (он же NSThemeView)
- Удалите свою кнопку из своего superView
- Установить рамку своей кнопки
- Добавить кнопку назад к просмотру темы
Таким образом, код будет выглядеть примерно так:
NSView *themeView = [self.contentView superview];
NSUInteger adj = 6;
[self.btnFeatured removeFromSuperview];
self.btnFeatured.frame = NSMakeRect( self.btnFeatured.frame.origin.x,
self.window.frame.size.height - self.btnFeatured.frame.size.height - adj,
self.btnFeatured.frame.size.width, self.btnFeatured.frame.size.height);
[themeView addSubview:self.btnFeatured];
Вот и все! Вы можете использовать свою розетку для включения / выключения кнопки, установки маскирующего изображения при выборе, включения / отключения панели инструментов или даже скрытия всего и добавления заголовка окна. Все это без беспокойства, если Apple изменит свои стандартные заголовки окон.
P.S. Никакие частные рамки не использовались в этой публикации вообще!