如何确定NSSearchField/NSTextField是否具有输入焦点?

Jak*_*les 13 macos cocoa

如何确定NSSearchField/NSTextField是否具有输入焦点?

小智 29

之前的答案是错误的,因为NSTextField/ NSSearchField它本身不会成为第一个响应者并处理已编辑的文本.相反,他们使用窗口的字段编辑器,该窗口编辑器在窗口上的NSTextView所有字段之间共享(因为它们中只有一个可以一次具有焦点).

您需要查看第一个响应者是否为a NSText,如果是,则查看搜索字段/文本字段是否为其委托.

NSResponder *firstResponder = [[NSApp keyWindow] firstResponder];
if ([firstResponder isKindOfClass:[NSText class]] && [(id)firstResponder delegate] == mySearchField) {
    NSLog(@"Yup.");
}
Run Code Online (Sandbox Code Playgroud)


mke*_*ser 8

虽然格雷格·泰特斯(Greg Titus)的答案可能有用,但我认为以下是更好的方法:

BOOL isFirstResponder = mySearchField.currentEditor == mySearchField.window.firstResponder;
Run Code Online (Sandbox Code Playgroud)