2016-06-15 4 views
2

У меня есть приложение, которое находится в строке меню, и когда вы нажимаете на кнопку, она представляет собой NSPopover.Как сделать панель меню (NSPopover) активным при нажатии на кнопку меню?

Это все работает нормально, но я хочу, чтобы NSSearchField стал первым ответчиком, поэтому пользователь может ввести прямо в поле.

Однако, если приложение еще не было выбрано, оно не будет работать. И хотя похоже, что окно поиска активно, ввод на клавиатуре идет в предыдущее приложение, которое было открыто, потому что технически это все еще активное окно.

Я видел несколько вопросов о таких вещах, но все они требуют методов objc, таких как makekeyandorder, или просто вещи, которые не будут применяться к NSPopover.

Так что мой вопрос: - Есть ли способ, которым при нажатии кнопки я могу заставить приложение стать активным приложением?

У меня было дикое предположение и попытался NSApplication().sharedApplication().becomeFirstResponder(), но не повезло.

Если есть другой способ сделать это, я просто пропустил полностью, то, пожалуйста, дайте мне знать!

+0

Привет, вы можете добавить скриншот? – xmhafiz

+0

Лучше, вот видео - http://f.cl.ly/items/3L152r3F442G2L1P0y3w/Qwiki%20Bug.mov Как вы можете видеть, когда я впервые нажимал кнопку меню, приложение ранее не было активным, поэтому поле не становится первым ответчиком. Но после того, как я нажимаю на popover, когда я закрываю и открываю его, поле поиска может стать первым ответчиком. –

+0

Я знал, что это глупый вопрос. –

ответ

2

Я установил его сам, в конце концов, оказалось, что это очень простое исправление, как ожидалось.

Все, что мне нужно было, было вызвано NSApplication.sharedApplication().activateIgnoringOtherApps(true) в режиме ViewControllers viewDidAppear().

Он исправляет все!

+0

интересно, он не работает, когда я строю и пытаюсь использовать xcode 8. он кажется прекрасным, когда другие приложения имеют фокус. go figure ... – joe

+2

Спасибо! Прекрасно работает. В Swift 4 синтаксис слегка изменился: 'NSApplication.shared.activate (ignoringOtherApps: true)' – Savjee