gpt4 book ai didi

objective-c - 当控件成为关键时我如何收到通知?我想让我的自定义警告弹出窗口 NSWindow 自动隐藏和显示;只有隐藏部分有效

转载 作者:行者123 更新时间:2023-12-03 17:51:28 26 4
gpt4 key购买 nike

我有一个自定义 NSWindow 子类,用于在 NSTextFields 上显示弹出警告。我希望警告在 NSTextField 失去关键状态时自动隐藏,并在获得关键状态时再次显示。所以我有

    self.onBegin = [[NSNotificationCenter defaultCenter] addObserverForName:NSControlTextDidBeginEditingNotification
object:self.textfield
queue:nil
usingBlock:^(NSNotification *note){
[self orderFront:self];
}];
self.onEnd = [[NSNotificationCenter defaultCenter] addObserverForName:NSControlTextDidEndEditingNotification
object:self.textfield
queue:nil
usingBlock:^(NSNotification *note){
[self orderOut:self];
}];

onEnd 工作正常:当我从文本字段移开或执行其他操作等时,自定义窗口会隐藏自身。但是 onBegin 似乎不会触发,直到我开始实际更改文本字段的内容。

还有其他我可以使用的选项吗?我是否应该为此使用通知,或者是否有一些我不知道的 API(必须是 10.7+)?谢谢。

最佳答案

您可以使用键值观察 (KVO) 来监视包含文本字段的窗口的 firstResponder 属性。当您收到第一响应者已更改的通知时,您可以检查它是否是您感兴趣的文本字段之一。但请注意,窗口的 firstResponder 不会是文本字段本身,它将是充当文本字段的字段编辑器的文本 View 。要确定字段编辑器服务哪个文本字段,请检查字段编辑器的委托(delegate)

参见Cocoa Event Handling Guide: Event Handling Basics – Determining First-Responder Status .

if ([window.firstResponder isKindOfClass:[NSTextView class]] &&
[window fieldEditor:NO forObject:nil] != nil)
{
NSTextField *field = [window.firstResponder delegate];
// Do something with 'field', which is the text field that has focus
}

关于objective-c - 当控件成为关键时我如何收到通知?我想让我的自定义警告弹出窗口 NSWindow 自动隐藏和显示;只有隐藏部分有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25558728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com