我有一个包含几个 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;
}
然后在所有 NSButtons 上执行的 Update 方法中,我写道:
if ([self isTextFieldInFocus:display]) {
[display setHidden:YES];
[display setHidden:NO];
}
其中 display 是 NSTextField 出口的名称。
现在,当我选择一些文本,然后按下其中一个按钮时,NSButtons 上的键绑定又恢复了工作。这允许用户选择和复制文本,但是他必须按一个按钮才能输入击键,我认为这是可以的。