Как бы вы сделали заголовок элемента статуса изображением, а не текстом?

Я создал элемент состояния (элемент строки меню) для своего приложения, но на данный момент его заголовок является текстом, как мне заставить его отображать изображение?

Это часть кода, которая устанавливает заголовок. Что мне нужно изменить в этом коде, чтобы он отображал изображение?

[item setTitle:@"MenuItem"];

person Joshua    schedule 10.05.2009    source источник


Ответы (1)


Вы используете setImage:, предоставляя ему NSImage, который вы хотите отобразить в строке меню.

Также обратите внимание, что у вас может быть NSStatusItem с изображением и текста, например, с индикатором заряда батареи.

Вот небольшой пример установки изображения в файл с именем OtherImage.jpg:

NSImage *statusItemImage = [NSImage imageNamed:@"OtherImage"];
if( !statusItemImage ) {
  NSLog(@"ERROR: Could not load the image for 'OtherImage.png'");
} else {
  [item setImage:statusItemImage];
}

Убедитесь, что файл OtherImage.png действительно добавлен в ваш проект Xcode и скопирован в каталог Resources приложения. Если ваше изображение не загружается, это означает, что файл назван неправильно, на самом деле это не изображение или он не входит в комплект приложения.

person Alex Rozanski    schedule 10.05.2009
comment
А, понятно, поэтому я бы заменил setTitle:@MenuItem на setImage:(NSImage *) , но где мне указать местоположение моего изображения? - person Joshua; 10.05.2009
comment
Сначала вы загружаете изображение. Вы можете использовать что-то вроде NSImage *statImage = [NSImage imageNamed:@MyStatusImage]; Просто убедитесь, что MyStatusImage.png или что-то еще действительно находится в папке ресурсов вашего приложения. - person Jason Coco; 10.05.2009
comment
Куда бы я поместил код NSImage *statImage = [NSImage imageNamed:@MyStatusImage]; ? - person Joshua; 10.05.2009
comment
Как насчет этого кода setImage:[[NSBundle mainBundle] pathForResource:@OtherImage ofType:@png]]; ? - person Joshua; 10.05.2009
comment
Джошуа: setImage: делает снимок. pathForResource:ofType: возвращает строку. Строка != изображение. Вам нужно загрузить изображение, которое находится по этому пути; класс NSImage имеет методы для этого. - person Peter Hosey; 10.05.2009
comment
Итак, какой код я должен заменить [item setTitle:@MenuItem]; с участием? - person Joshua; 10.05.2009
comment
Google для NSImage, первое попадание — документация класса. Там вы можете найти, как инициализировать изображение из пути к файлу примерно за 5 минут чтения. - person Dirk Stoop; 11.05.2009
comment
@Joshua - я добавил некоторый код в ответ Perspx, но вам действительно следует проверить документы и выполнить поиск в Google. Кажется, вы можете прочитать некоторые основы Cocoa, такие как документ по архитектуре и рекомендации по дизайну MVC. Ваше здоровье! - person Jason Coco; 11.05.2009
comment
Да, это работает! Спасибо, но есть одна вещь, как бы я установил выделенное изображение, потому что на данный момент я только что получил этот код [item setHighlightMode: YES]; и это работает только с текстом. - person Joshua; 11.05.2009
comment
@Joshua - используйте setAlternateImage: для элемента. Пожалуйста, ознакомьтесь с документацией. Perspx предоставил ссылку на документ для класса NSStatusItem прямо здесь. - person Jason Coco; 11.05.2009
comment
Я использовал код для установки изображения элемента состояния и изменил его на setAlternateImage: но теперь он не позволит вам щелкнуть элемент состояния. - person Joshua; 11.05.2009
comment
Я использовал код для установки изображения элемента состояния и изменил его на setAlternateImage: но теперь он не позволит вам щелкнуть элемент состояния. Почему? - person Joshua; 12.05.2009
comment
Я использовал код для установки изображения элемента состояния и изменил его на setAlternateImage: но теперь он не позволит вам щелкнуть элемент состояния. Почему? Пожалуйста, ищите ответ. - person Joshua; 13.05.2009