我有一个包含多个NSButton对象的布局,以及一个只能选择文本的NSTextField。其他NSButton对象具有关联的键绑定,这在我在文本字段中选择一些文本之前一直很有效。从那里开始,布局中其他按钮的键绑定不再起作用。
我已经研究了不同的解决方案,比如尝试设置SetSelectable:NO和YES,但看起来文本字段保持其焦点并接收所有击键,即使它不可编辑。
我希望文本字段中的文本是可选的,但是如果单击其中一个按钮,则文本字段应该停止接收键事件。
有什么想法吗?
我找到了解决方案。
在Macrumors: http://forums.macrumors.com/showthread.php?t=852807
我找到了一个方法,用于检查文本字段是否具有焦点:
- (BOOL)isTextFieldInFocus:(NSTextField *)textField {
BOOL inFocus = NO;
inFocus = ([[[textField window] firstResponder] isKindOfClass:[NSTextView class]]
&& [[textField window] fieldEditor:NO forObject:nil]!=nil
&& [textField isEqualTo:(id)[(NSTextView *)[[textField window] firstResponder]delegate]]);
return inFocus;
}
然后在所有NSButton上执行的Update方法中,我写道:
if ([self isTextFieldInFocus:display]) {
[display setHidden:YES];
[display setHidden:NO];
}
其中display是NSTextField出口的名称。
现在,当我选择一些文本,然后按下其中一个按钮时,NSButtons上的键绑定就会恢复正常工作。这允许用户选择和复制文本,但是他必须按一个按钮来输入击键,我认为这是可以的。