gpt4 book ai didi

cocoa - 如何处理急救人员和 NSPopover

转载 作者:行者123 更新时间:2023-12-03 16:06:47 25 4
gpt4 key购买 nike

我正在尝试复制 iTunes 中搜索字段的行为,以查找股票代码和名称。具体来说,当您开始在搜索字段中输入内容时,会出现一个弹出窗口,其中包含已过滤的项目。在大多数情况下,我都能做到这一点,但我无法复制的是它处理第一响应者的方式 enter image description here

输入三个字符后,我的弹出窗口出现。此时 NSSearchField 将失去第一响应者状态,因此我无法再继续输入。我想要的行为是弹出窗口出现后继续输入的能力如果使用箭头键滚动项目,然后继续输入,您将从搜索字段中的最后一个字符继续。

我尝试的是子类化 NSTextView (将其用作 NSSearchField 的自定义字段编辑器)并覆盖

- (BOOL)resignFirstResponder 

通过简单地返回“NO”,我可以在弹出窗口出现后继续输入,但显然我无法选择弹出窗口中的任何项目。所以我尝试了以下操作,如果发生向下箭头或 mousedown 事件,则返回 YES。

@interface SBCustomFieldEditor ()
{
BOOL resignFirstRepond;
}
@end

@implementation SBCustomFieldEditor

- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
resignFirstRepond = NO;
}
return self;
}

- (BOOL)resignFirstResponder
{
return resignFirstRepond;
}

- (void)keyDown:(NSEvent *)theEvent
{
if ([theEvent keyCode] == 125) {
resignFirstRepond = YES;
[self resignFirstResponder];
}
[super keyDown:theEvent];
}

- (void)mouseDown:(NSEvent *)theEvent
{
resignFirstRepond = YES;
[self resignFirstResponder];
}

这适用于 mousedown 事件,但不适用于 keydown 事件,此外,当用户恢复打字时,这并不能解决问题。

有什么建议吗?

最佳答案

与此同时,我找到了一个简单的解决办法。子类化您的 TextView 并实现 - (BOOL)canBecomeKeyView。始终返回“NO”。当弹出窗口显示时,它只会被调用一次。您可以随时使用 TextView 。

关于cocoa - 如何处理急救人员和 NSPopover,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20730619/

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