Добавление пользовательского представления на панель инструментов - PullRequest
13 голосов
/ 15 февраля 2011

Я борюсь с Какао уже 2 часа безуспешно.Я хочу добавить пользовательский вид на панель инструментов.Итак, я добавил NSToolbar в окно (с IB), и добавил мой вид (который отлично работает).IB автоматически создал NSToolbarItem.Я следовал инструкциям Apple здесь: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Toolbars/Tasks/AddRemoveToolbarItems.html#//apple_ref/doc/uid/20000755-BBCGJCDJ

Проблема в том, что я не знаю, что делать сейчас, вид не отображается, хотя в окне отображается его ярлык.

Вот код, который я использую для рисования (очень просто, он предназначен для тестирования)

- (void)drawRect:(NSRect)dirtyRect {
    [[NSColor blackColor] set];
    [[NSBezierPath bezierPathWithRect:self.bounds] fill];
}

Может ли кто-нибудь мне помочь?

Заранее спасибо.

Ответы [ 2 ]

19 голосов
/ 16 февраля 2011

Я решил проблему.

Я поместил свой пользовательский вид в корень пера.Я добавил классический NSToolbarItem и создал два выхода: один для пользовательского представления и один для NSToolbarItem.На -(void)awakeFromNib я вызвал setView: для NSToolbarItem с пользовательским представлением.

Согласно некоторым источникам в Интернете, это ошибка в Интерфейсном Разработчике.

6 голосов
/ 29 декабря 2012

По словам инженера Apple в обсуждении по адресу http://www.mail-archive.com/cocoa-dev@lists.apple.com/msg35673.html, в Interface Builder есть ошибка, из-за которой «CustomПредставления "(NSViews, созданные в IB) не декодируются должным образом при использовании в качестве представления для NSToolbarItem и поэтому не отображаются на панели инструментов.Другие виды NSView, такие как NSButtons и NSBox, будут отлично работать как элементы панели инструментов: вы можете создать их в Интерфейсном Разработчике и затем перетащить их на панель инструментов, чтобы превратить их в элементы панели инструментов.

(Обсуждение вприведенная выше ссылка подразумевает, что ошибка заключается в том, что «пользовательские представления» создаются из XIB во время выполнения: с использованием initWithFrame: вместо initWithCoder:. Обсуждение началось в 2009 году, но это все еще не исправлено в XCode 4.5 / OSX 10.8.)

В моем случае я использовал обычный NSView для обертывания набора элементов управления (ползунок громкости и кнопки min / max), а не реализовывал собственный подкласс NSView.Я смог избежать этой проблемы, используя NSBox в качестве контейнера вместо NSView: я сделал NSBox прозрачным, без заголовков и без полей, так что в остальном он действовал как обычная оболочка NSView.Это было немного больше работы в IB, но избавило меня от необходимости подключать представление к элементу панели инструментов программным способом.

...