我有一个应用程序,它打开弹出窗口NSTextField
。文本字段不可编辑。文本字段的行为设置为Editable
。我仍然可以将文本粘贴和复制到此字段,但无法编辑它。
任何人都知道,可能出了什么问题?
不确定您是否仍然需要答案,但可能还有其他人仍在寻找答案。我在苹果开发者论坛上找到了解决方案。引用原作者的话:
主要问题是键盘事件的工作方式。尽管 NSTextField (及其所有超级视图)接收键盘事件,但它不会执行任何操作。发生这种情况是因为附加弹出窗口的视图位于无法成为关键窗口的窗口中。你无法以任何方式访问该窗口,至少我不能。因此,解决方案是使用类别覆盖应用程序中每个 NSWindow 的 canBecomeKeyWindow 方法。
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
这使得弹出窗口完全响应。如果您需要另一个必须对 canBecomeKeyWindow 响应“否”的窗口,您始终可以创建一个子类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)