Как получить Spotlight-подобный эффект ввода текста в строке меню? - PullRequest
2 голосов
/ 16 июля 2011

Я хочу, чтобы в моем меню Mac была иконка в меню - и иконка должна вызывать меню при нажатии. Имея больше записей в меню, я хотел бы иметь верхнюю строку в качестве универсального текстового поля для ввода - как в Spotlight:

http://dl.dropbox.com/u/3943878/_mine/Screen%20shot%202011-07-16%20at%2012.29.18.png

Можно ли добавить такое поле в NSMenu? Или я должен сделать это как окно типа панели?

Ответы [ 3 ]

3 голосов
/ 17 июля 2011

Если вы используете xcode 4, создайте пользовательский вид в конструкторе интерфейсов и добавьте текстовое поле или все, что вам нужно. В IB также перетащите «Меню» из библиотеки объектов с таким количеством элементов, как вы хотите. Затем просто нажмите Ctrl + клик по пункту меню, который вы хотите сделать в текстовом поле (в вашем случае это будет самый верхний элемент) и перетащите его в пользовательский вид и выберите «вид». Теперь, когда вы открываете меню, вместо того, чтобы показывать пункт меню в этом пространстве, оно показывает все, что было в вашем пользовательском представлении.

РЕДАКТИРОВАТЬ: Что касается вашего комментария, вот что вы должны сделать. Сделайте свое меню розеткой, открыв представление помощника редактора и, удерживая клавишу Ctrl + щелчок в меню, выберите файл заголовка, который вы хотите использовать. теперь просто создайте метод, который будет запускаться всякий раз, когда откроется меню, удобно, когда Apple уже сделала это, он называется menuWillOpen.

- (void)menuWillOpen: nameOfYourMenu{

[self performSelector:@selector(methodExecutedWhenMenuIsClicked) withObject:nil afterDelay:0.0 inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];

задержка в 0 сделает это незамедлительным, это нужно сделать в цикле выполнения общих режимов, чтобы меню обновлялось, даже когда оно открыто. Теперь просто сделайте methodExecutedWhenMenuIsClicked и установите его так, чтобы текстовое поле отвечало.

- (void)methodExecutedWhenMenuIsClicked{

[[yourTextfiled window] makeFirstResponder:yourTextField];
2 голосов
/ 16 июля 2011

Вы можете поместить любой вид в меню, используя -[NSMenuItem setView:]. См. Длинный комментарий в NSMenuItem.h и раздел Представления в меню в Меню приложений и темы программирования всплывающего списка .

0 голосов
/ 21 сентября 2011

Вы, вероятно, будете бороться совсем немного. Я просто попытался сделать то же самое, и, прочитав Представления в меню в Меню приложений и темы программирования всплывающих списков Документ, на который ссылается Аруман, я нашел это:

Вид в элементе меню может получать все события мыши как обычно, но события клавиатуры не поддерживаются. Во время «незакрепленного» отслеживания меню (то есть манипулирования меню с нажатой кнопкой мыши) представление в элементе меню получает mouseDragged: events.

Я думаю, что мы SOL. Видимо, Spotlight вместо этого открывает окно без полей.

...