У меня есть NSStatusItem, который отображает NSPopover, который содержит NSTextField, но текстовое поле не редактируется, хотя это так было в Xcode. Теперь это известная ошибка, и есть, по-видимому, решение, которое кто-то разместил here. Мне действительно нужно обойти эту ошибку.NSStatusItem с NSPopover и NSTextField
Я просто цитирую ответ здесь для удобства:
Основной проблемой является то, как события клавиатуры работает. Хотя NSTextField (и все его супервизоры) получает события клавиатуры, он не предпринимает никаких действий. Это происходит потому, что представление, в котором находится popover, находится в окне, которое не может стать ключевым окном. Вы не можете получить доступ к этому окну никоим образом, по крайней мере, я не мог. Таким образом, решение переопределяет метод canBecomeKeyWindow для каждого NSWindow в нашем приложении с использованием категории.
NSWindow+canBecomeKeyWindow.h
@interface NSWindow (canBecomeKeyWindow)
@end
NSWindow+canBecomeKeyWindow.m
@implementation NSWindow (canBecomeKeyWindow)
//This is to fix a bug with 10.7 where an NSPopover with a text field cannot be edited if its parent window won't become key
//The pragma statements disable the corresponding warning for overriding an already-implemented method
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (BOOL)canBecomeKeyWindow
{
return YES;
}
#pragma clang diagnostic pop
@end
Это делает поповер полностью resposive. Если вам нужно другое окно, которое должно отвечать NO на canBecomeKeyWindow, вы всегда можете сделать подкласс.
Я действительно не понимаю, что я должен делать. Я просто создаю эти два файла NSWindow + canBecomeKeyWindow (.h и .m), и это будет делать это? Потому что это не работает для меня.
Я не уверен в этом, но это работает, только если я использую NSWindow, который отображает NSPopover? Я не использую NSWindow, как я могу получить NSTextField для редактирования?
Спасибо.
Спасибо за ответ. Надеюсь, Apple скоро это исправит. Я также искал альтернативы, но я предпочел бы полагаться на код Apple, потому что другие могут не обновлять их навсегда в будущем. – iMaddin