У меня есть потребность породить окно, которое будет колебаться чуть выше моего главного окна в приложении какао. Я хочу, чтобы это главное окно позволило пользователю вводить некоторый текст в поле ввода. Все хорошо, пока поле ввода текста на самом деле не получает фокус. Главное окно становится "деактивированным". Это окно является безграничным и является немного пользовательской формой - больше как карта при наведении курсора, чем что-либо еще, я предполагаю.
В основном я хотел бы эту вещь работать почти точно как Центр внимания (Apple + Пространство) - можно ввести текст, но это - такая вспомогательная операция, что в контексте большего UX, Вы не хотите резкого эффекта отображающегося серым главного окна (становление неактивным). Вы заметите, когда у Вас будет некоторое приложение, открытое и в фокусе, центр внимания не заставит окно того приложения становиться неактивным.
Эта проблема возникает, потому что ввод текста, кажется, ТРЕБУЕТ, чтобы дочернее окно стало ключевым окном (это не позволит Вам установить курсор в поле ввода текста). Когда это становится ключевым, главное окно становится неактивным.
До сих пор я попробовал:
У кого-либо мастера Cocoa/OSX есть какие-либо идеи? Я стал немного одержимым этим. Зуд я не могу поцарапать.
Править: также попытались переопределить следование дочернего окна. При нажатии окно заставляет окно главного приложения стать неактивным.
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)canBecomeMainWindow {
return NO;
}
Редактирование 2: После завинчивания о с NSMenu некоторое время, я фрагментировал тот подход. Кажется, что я нашел что-то, как бы то ни было. В NSPanel существует названная маска стиля окна:
NSNonactivatingPanelMask
The panel can receive keyboard input without activating the owning application.
Valid only for an instance of NSPanel or its subclasses; not valid for a window.
Испытание этого теперь...
Редактирование 3: NSNonactivatingPanelMask не добивался цели. Никакие идеи.
Вам нужно окно, которое может стать ключевым окном, но не может стать главным окном. Вы могли бы реализовать такой класс самостоятельно, но для этого, в основном, и существует NSPanel, так что попробуйте сначала его.