【发布时间】:2011-08-21 20:59:38
【问题描述】:
出于某种原因,有时我在状态栏菜单中使用的 NSTextField 并不总是允许我输入文本。我单击它并没有任何反应,就好像它被禁用一样。重新启动程序后,它再次工作。我什么也没做,它只是在界面构建器中创建的。
【问题讨论】:
标签: objective-c cocoa macos user-interface
出于某种原因,有时我在状态栏菜单中使用的 NSTextField 并不总是允许我输入文本。我单击它并没有任何反应,就好像它被禁用一样。重新启动程序后,它再次工作。我什么也没做,它只是在界面构建器中创建的。
【问题讨论】:
标签: objective-c cocoa macos user-interface
那是因为没有 NSWindow 包含 NSTextField。当窗口获得主窗口时,NSWindow 设置第一响应者。 NSStatusBar 是全局的。它从不集中,因此您的文本字段只会在一开始就集中。
我不确定是否有办法很好地解决这个问题。您可以尝试手动设置第一响应者。您也可以添加global event monitor
例子:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent* incoming) {
[textfield setStringValue:[incoming characters]];
}];
注意:这是解决此问题的一种非常糟糕的方法。如果可能的话,我会首先尝试手动将 NSTextField 设置为第一响应者。
【讨论】:
setStringValue:,否则您一次只能在字段中输入一个字母!
-appendString: 无效,你想要-stringByAppendingString:。