如何处理急救人员和 NSPopover

2024-01-03

I’m trying to replicate the behaviour of the search field in iTunes, for looking up stock symbols and names. Specifically, as you start typing in the search field a popover appears with the filtered items. For the most part I have this working however what I can’t replicate is the way it handles first responder enter image description here

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

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

- (BOOL)resignFirstResponder 

通过简单地返回“否”,我可以在弹出窗口出现后继续输入,但显然我无法选择弹出窗口中的任何项目。所以我尝试了以下操作,如果发生向下箭头或 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 事件,此外,当用户恢复打字时,这并不能解决问题。

有什么建议么?


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理急救人员和 NSPopover 的相关文章

  • NSMenuItem、自定义视图和 mouseUp 的奇怪问题:

    我在这里遇到了一个非常非常奇怪的 NSMenu 问题 我使用的大约一半的 NSMenuItems 通过 NSMenuItem 上的 setView 方法具有自定义视图 在此自定义视图中 我实现了 mouseUp 来捕获用户单击菜单项的时间
  • 为什么类方法中的“self = [[Rectangle alloc] init]”是错误的?

    在 Apple 的文档 Objective C 编程语言 中 第 48 页说道 Rectangle rectangleOfColor NSColor color self Rectangle alloc init BAD self setC
  • Xcode 愚蠢警告:视图正在裁剪其内容

    我在 Xcode 4 中收到这个愚蠢的警告 Clipped Content View is clipping its content 如果我创建一个无边框斜角按钮 其图像大于按钮本身 为什么 我怎样才能抑制它 我也遇到了类似的灰色警告问题
  • 以编程方式设置 Mac 鼠标/触控板速度

    我正在尝试更改我正在开发的应用程序的鼠标跟踪速度 注意 不是加速 我到处寻找一种方法来做到这一点 但找不到任何东西 我怀疑这与我在 IOKit hidsystem 框架上的这个函数中给出的值有关 IOHIDSetAccelerationWi
  • Objective-C 2.0中的多线程问题

    我有我的主应用程序委托 其中包含一个返回对象的方法 该应用程序委托在主线程上运行 我还有一个在不同线程上运行的 NSOperation 除了希望有时能够在主线程上调用我的应用程序委托方法之外 我还需要从 NSOperation 线程中调用它
  • 没有编辑菜单的对话框中的 Cocoa 键盘快捷键

    我有一个LSUIElement显示菜单栏状态项的应用程序 应用程序可以显示包含文本字段的对话窗口 如果用户右键单击 按住 Control 键单击文本字段 则会出现一个菜单 允许剪切 复制 粘贴等 但是 标准 Command X Comman
  • 阻止 NSView 实例接收鼠标事件

    我在窗口中有一个 NSView 并且核心动画层已打开 我时常使用此视图来显示带有动画的图像 我需要整个视图作为后层 而不仅仅是图像 在这个我称为 AnimationBaseView 的视图后面是用户交互的其他视图 一切都很好 除了 Anim
  • 不区分大小写的 NSString 比较

    使用此代码我可以比较字符串值 elementName isEqualToString Response 但这是区分大小写的 有没有办法比较字符串而不区分大小写 有一个caseInsensitiveCompare 方法上NSString 你为
  • 如何让程序在登录时自动启动?

    如何设置菜单栏应用程序在登录时自动启动 我希望这是默认的 我可以简单地通过在 info plist 中添加一个 bool 来做到这一点吗 此解决方案仅适用于非沙盒应用程序 LSSharedFile此解决方案中使用的功能仅适用于非沙盒应用程序
  • 从 NSString 中去除非字母数字字符

    我正在寻找一种快速简便的方法来从文本中删除非字母数字字符NSString 可能使用的东西NSCharacterSet 但我累了 似乎没有什么返回只包含字符串中字母数字字符的字符串 我们可以通过拆分然后合并来做到这一点 组件Separated
  • 从选定的文件夹中获取大小 >100MB 的文件列表及其路径目标 c

    我想获取我的 mac 系统的所有文件及其路径和大小的列表 由此 我只想过滤那些文件大小超过 100 MB 的文件 我使用下面的代码获取了系统的大小 NSError error NSFileManager fileManager NSFile
  • NSEvent addGlobalMonitorForEventsMatchingMask:热键拦截

    I wanna intercept hotkeys that begin with Control Shift and ends with a character mandatory I have the following code NS
  • 类不符合 Swift 中的“CBPeripheralManagerDelegate”

    我正在尝试用 Swift 构建 iBeacon 发射器 但我无法让我的班级采用CBPeripheralManagerDelegate协议 在 Objective C 中需要这个协议来初始化 PeripheralManager 对象 但是在
  • 如何使用核心动画来动画 NSTextField 的背景颜色?

    我正在尝试使用核心动画来突出显示无效的文本字段 my field animator setBackgroundColor NSColor yellowColor 更新字段背景颜色 但不会以动画方式显示更改 正确更新字段位置等属性 我假设这是
  • 什么时候需要 NSCopying?

    我知道如果您的对象将用作 NSDictionary 中的键 则需要它 还有其他类似的情况需要 NSCopying 吗 如果我认为我不需要我的模型对象符合 NSCopying 我可能是错的吗 将 NSCopying 协议视为克隆例程的 Obj
  • macOS 公证错误:“使用的签名算法太弱”

    我想知道是否有人熟悉这个错误 该错误仅在我将应用程序上传到 Apple 进行公证时才会发生 AppName zip AppName app Contents Resources EWSMacCompress tar gz EWSMacCom
  • 具有多列的 NSTableView

    有什么简单的方法可以将我的 NSTableView 设置为多列以仅在一列中显示某些数据 我已经设置了 IBOutlets 但我不知道从哪里开始 假设您没有使用 Cocoa Bindings Core Data 您可以通过实现以下两个方法来在
  • 在 XCode 数据模型编辑器中获取属性的最小值

    如何在 XCode 的数据模型编辑器中添加获取的属性以获得一个属性的最小值 我的型号 模型http www freeimagehosting net uploads b48853070e png http www freeimagehost
  • Cocoa Key Value Bindings:Controller Key的各个选项的解释是什么?

    当我使用 Interface Builder 将控件绑定到 NSArrayController 时 绑定检查器中的 Controller Key 字段下有多种选项 我理解什么是 arrangedObjects 我半理解什么是 选择 但我很想
  • 将 NSTabViewItem 的副本从 NSTabView 添加到同一个 NSTabView

    我正在创建一个简单的网络浏览器 并希望实现选项卡 为此 我使用NSTabView 我基本上希望每个选项卡都有一个WebView这将显示网站已加载 我从只有一个选项卡开始 并希望在创建新选项卡时添加第一个选项卡的精确副本 我尝试过类似的东西t

随机推荐