NSTokenField 捕获一些 NSEvents

2024-04-12

我需要为 NSTokenField 和解决方案实现 Command + Enter、Command + O 和 Esc 快捷键https://stackoverflow.com/a/18486965/1067147 https://stackoverflow.com/a/18486965/1067147不起作用,因为 -(void)noop:(SEL)sel 没有用。


我的方法是为层次结构中的上层类 NSView 创建类别(我也尝试为 NSTextView 但没有运气):

//  NSView+WideInterpreter.h

#import <Cocoa/Cocoa.h>

#define kNotificationTokenModifier          @"kNotificationTokenModifier"
#define kNotificationTokenModifier_modifier @"kNotificationTokenModifier_modifier"

typedef enum{

    BMTokenModifier_CommandEnter = 10,
    BMTokenModifier_CommandO,
    BMTokenModifier_Esc,
    BMTokenModifier_nextKeyViewActivate

} BMTokenModifier;

@interface NSView (WideInterpreter)

@end

and

NSView+WideInterpreter.m
#import "NSView+WideInterpreter.h"

@implementation NSView (WideInterpreter)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"

- (void)interpretKeyEvents:(id)keyEvents{

    NSMutableArray *result = [[NSMutableArray alloc] init];

    for (NSEvent *theEvent in keyEvents) {

        NSUInteger clearFlags = ([theEvent modifierFlags] &     NSDeviceIndependentModifierFlagsMask);
        BOOL commandPressed = (clearFlags == NSCommandKeyMask);

        switch ([theEvent keyCode]) {
            case 31:{//Ctrl+O
                if (commandPressed)
                    [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTokenModifier
                                                                        object:self
                                                                          userInfo:@{kNotificationTokenModifier_modifier: @(BMTokenModifier_CommandO)}];
            }break;

            case 36:{//Enter
                if (commandPressed)
                    [[NSNotificationCenter defaultCenter]     postNotificationName:kNotificationTokenModifier
                                                                        object:self
                                                                          userInfo:@{kNotificationTokenModifier_modifier: @(BMTokenModifier_CommandEnter)}];
                else
                    [super insertNewlineIgnoringFieldEditor:self];
            }break;

            case 53://Esc
                [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationTokenModifier
                                                                    object:self
                                                                  userInfo:@{kNotificationTokenModifier_modifier: @(BMTokenModifier_Esc)}];
                break;

            default:// allow super to handle everything else
                [result addObject:theEvent];
                break;
        }
    }

    [super interpretKeyEvents:result];

}

#pragma clang diagnostic pop

@end

对于使用的作品:

[[NSNotificationCenter defaultCenter] addObserverForName:kNotificationTokenModifier
                                                  object:nil
                                                   queue:[NSOperationQueue currentQueue]
                                              usingBlock:^(NSNotification *note) {

                                                  BMTokenModifier modifier = (BMTokenModifier)[[[note userInfo] objectForKey:kNotificationTokenModifier_modifier] integerValue];

                                                  switch (modifier) {
                                                      case BMTokenModifier_CommandEnter:
                                                          [self sendMessage];
                                                          break;

                                                      case BMTokenModifier_CommandO:
                                                          [self attachFiles];
                                                          break;

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

NSTokenField 捕获一些 NSEvents 的相关文章

  • OSX/Cocoa 应用程序通常使用什么位置来存储数据文件?

    他们是否将它们写入 存储在应用程序包 包本身中 或者其他一些规范位置 还是好像没有什么标准 文件通常会进入 Library Application Support Your App 偏好设置进去 Library Preferences
  • 为什么 UIScrollView 在顶部留有空间并且不滚动到底部

    我是 Objective C 编程新手 我正在使用 UIScrollView 及其上的一些标签 图像和文本视图 我已关闭自动布局 并已尝试打开 调整滚动视图插图 标题中描述的情况 和关闭 不滚动 这是我插入 viewDidLoad 的内容
  • UIPageControl 未显示

    我使用以下内容来显示滚动视图和页面控制 scrollView UIScrollView alloc initWithFrame CGRectMake 0 0 320 179 pageControl UIPageControl alloc i
  • 我可以通过编程方式获取连接到手机的 wifi 的 MAC 地址吗?

    我的手机已连接到 wifi 我想获取我的 wifi 的 MAC 地址 BSSID 和 mac 地址是同一回事 您可以通过此函数获取 mac 地址 只需导入 SystemConfiguration CaptiveNetwork func ge
  • UIModalPresentationFormSheet 的圆角

    如果这是一个明显的问题 请原谅我 我是个相对较新的人 我有一个模态视图 我设置了自定义尺寸和圆角 void viewWillLayoutSubviews super viewWillLayoutSubviews self view supe
  • XCode 4.2 编译器错误

    当我使用 XCode 4 2 创建新项目 例如 单视图 iOS 应用程序 时 支持文件 文件夹中的 main m 文件如下所示 import
  • 使用动画更改 UIView 背景颜色

    我想改变我的UIView带有过渡动画的背景颜色 例如 如果视图是红色的 我将其更改为蓝色 蓝色将从屏幕底部向上滑动到顶部并充满整个屏幕 我想通过制作一个来做到这一点UIView具有相同大小和所需颜色 然后将其从屏幕外一直动画到顶部 但这似乎
  • iOS 中的 FacebookSDK 不显示关闭按钮且无法关闭

    您好 我已经为 iOS 6 应用程序集成了 Facebook SDK Facebook 身份验证和共享工作完美 但没有提供关闭 FB 对话框的规定 当FB对话框打开时 只有在身份验证成功后才会关闭 没有关闭或导航回来的规定 我如何制作关闭按
  • 如何在 iPhone 应用程序中播放来自服务器的视频 URL

    实际上 我通过使用从服务器获取一个网址XMLParser 我想在我的应用程序中播放这个视频网址 现在我使用了 MPMoviePlayerController 但它不起作用 请帮忙 XML解析器 m id loadXMLByURL NSStr
  • 如何确定 NSURLSessionTask 请求何时开始?

    I use NSURLSessionTask我正在尝试监视我的一些 HTTP 请求需要多长时间 我可以监视什么委托方法 或其他方法 NSURLSessionTask实际上提出了最初的请求 如果这是一个NSURLConnection里面一个N
  • iphone navigationController :在退出当前视图之前等待 uialertview 响应

    我有一个带有由导航控制器管理的后退按钮的视图 我想在用户单击后退按钮时检查文件是否已保存 如果文件已保存 您将返回到上一个视图 否则 uialertview 会询问您是否要保存文件 所以我这样做了 但视图消失了 然后警报视图出现了 void
  • 将 firebase 框架添加到 ios 项目时出现链接器错误

    我一直在尝试将 firebase 框架添加到我的 ios 应用程序中 我按照这里的说明进行操作 https www firebase com docs ios quickstart html https www firebase com d
  • ios7 绘图时出现延迟

    我有一个应用程序 在其中我正在视图上绘制一些草图 到目前为止 在我安装之前它运行良好ios7 我的应用程序使用触摸移动方法来识别运动的变化 但是当我画一条线时 触摸方法被调用 但线不会更新 直到我触摸结束ios7 所以画起来有一点点滞后 它
  • 如何使用 iPhone 将照片上传到服务器?

    我正在编写一个 iPhone 应用程序 它可以拍摄照片然后将其上传到服务器 如何使用 Cocoa 将照片上传到服务器 我想我在某处使用 NSUrl Thanks Header interface EPUploader NSObject NS
  • 如何更改 CIFilter CIQRCodeGenerator 过滤器的背景色和前景色

    我正在尝试为 OS X 制作一个 QR 码生成器 但我还没有成功制作一个比黑白 QR 码更丰富多彩的 QR 码我正在使用 CIImage 过滤器的 CIQRCodeGenerator 我将如何制作这个工作我有一个示例代码 已在我的应用程序中
  • iOS 8 UITableView 分隔符插入 0 不起作用

    我有一个应用程序 其中UITableView的分隔符插入设置为自定义值 右0 Left 0 这完美地适用于iOS 7 x 但是在iOS 8 0我看到分隔符插入设置为默认值15在右侧 即使在 xib 文件中它设置为0 它仍然显示不正确 我该如
  • 在 ios wifi 网络上查找对等点

    我试图弄清楚如何搜索登录到 wifi 网络且在特定端口上托管应用程序的其他设备 在不知道这些其他设备的地址甚至不知道它们托管的端口的情况下 如何检测它们的存在 一旦发现 我应该能够联系该设备并与其建立连接 最标准的 iOS方式 是使用Bon
  • NSMenuItem 中的自定义 NSView 未接收鼠标事件

    我使用 popUpStatusItemMenu 从 NSStatusItem 中弹出一个 NSMenu 这些 NSMenuItems 显示了一堆不同的链接 每个链接都通过 setAction 连接到目标的 openLink 方法 这种安排长
  • 在基于视图的 NSTableView 中,如何通过单击使控件成为第一响应者?

    基于视图的 NSTableView 似乎只有标准行为 为了使表内的文本字段成为第一响应者 用户必须双击或单击并 保持冷静 然而 考虑到基于视图的 NSTableViews 提供的灵活性 这种行为并不总是可取的 因为现在可能有很多不同且复杂的
  • iOS 上读取证书问题

    我正在尝试从 iOS 中的各种 URL 读取证书 然而 我的代码运行不佳 应该返回我需要的信息的数组总是返回null 我缺少什么 void findCertificate NSString url NSInputStream input N

随机推荐

  • 如何在 Powershell 中执行相当于 $PROGPATH/program 的 bash 操作?

    在 GNU Linux 中我会这样做 PROGPATH long and complicated path to some bin PROGPATH program args 但在 Powershell 中如果我尝试这样做 PROGPATH
  • 我需要一个非常简单的 PHP 数据库前端管理面板;指定表的简单记录编辑器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望为我们的公司网站添加一些动态 这是次要角色 所以我不想花太多时间在上面 此时 我所需要的只是一个简单的 PHP 脚本 非技术用户可以
  • 输出到字符串的 cout 相当于什么?

    我早该知道这一点 但是 printf is to sprintf as cout is to 请举个例子 听起来您正在寻找std ostringstream http en cppreference com w cpp io basic o
  • 我可以使用 iOS 推送通知来进行应用程序实时内容更新吗?

    我想使用没有徽章 消息或声音的推送通知消息 仅使用与应用程序相关的 JSON 以便实时更新应用程序的内容 当应用程序未运行时 这些通知毫无用处 因此当应用程序进入后台或用户空闲时 向我的服务器发送取消订阅 我不会发送它们 并在应用程序进入前
  • Scrapy:测试内联请求的有效方法

    我使用 scrapy inline requests 库编写了一个蜘蛛 所以我的蜘蛛中的解析方法看起来像这样 inline requests def parse self response1 item MyItem loader ItemL
  • python 原始字符串符号抛出带有尾部斜杠的错误

    我正在尝试使用原始字符串表示法在 python 中设置字符串变量的路径 但出现尾部斜杠错误 datapath r C path to my data 给我一个 扫描字符串文字时 EOL 错误 我认为原始字符串表示法应该将所有内容都包含在字符
  • 如何删除 HTML 正文中签名上方自动生成的行?

    When I Display邮件 要添加签名 签名上方添加两行空行 有没有办法删除它们 使邮件看起来更好 而不丢失签名格式 With objOutlookMsg SentOnBehalfOfName email protected cdn
  • getResource 使用 java 1.7 windows 7 在磁盘名称之前放置一个前导 /

    以下在磁盘名称之前给出了一个前导斜杠 我怎样才能避免这种情况 String pngpath getClass getResource resources image png getPath System out println pngpat
  • Restcomm gmlc 配置问题 主要地址不存在本地 SSN

    我在尝试在 Windows Server 2008 R2 上配置 Restcomm gmlc 时遇到问题 我收到这条消息 下图是HLR和Windows服务器的设置 以下是设置 GmlcManagement gmlcproperties xm
  • 如何用 Cocoa 获得准确的分贝值?

    我们正在创建一个应用程序 它可以记录周围的声音 并在声音超过指定分贝时采取必要的措施 为了实现应用程序目标 我们使用 AudioQueueObject h 中的以下方法 void getAudioLevels Float32 levels
  • innerHTML 将 CDATA 转换为注释

    我正在尝试使用 javascript 将一些 HTML 插入到页面中 并且我插入的 HTML 包含 CDATA 块 我发现 在 Firefox 和 Chrome 中 CDATA 正在转换为注释 HTML 不在我的控制之下 所以我很难避免使用
  • 在不知道编码的情况下如何读取编码头?

    如果我正在读取 HTML 文件的 XML 我是否必须读取告诉我编码的标签才能读取该文件 该标签的编码方式与文件的编码方式不一样吗 我很好奇你如何在不知道编码的情况下读取该标签 我意识到这个问题已经解决了 我只是好奇它是如何完成的 Updat
  • 在计算机上找不到 MySQL

    我最近直接从网站 mysql 5 7 9 osx10 10 x86 64 dmg 安装了MySQL 并且在尝试更改给定密码时遇到了很大的困难 返回的错误是 警告 在命令行界面上使用密码可能会导致 没有安全感 mysqladmin 连接到 l
  • Java:从 FTP 服务器访问文件

    我有一个 FTP 服务器 里面有一堆文件夹和文件 我的程序需要访问该服务器 读取所有文件并显示它们的数据 出于开发目的 我一直在使用硬盘驱动器上 src 文件夹中的文件 但现在服务器已启动并运行 我需要将软件连接到它 基本上我想要做的是获取
  • 是否可以获取 Stream 中的下一个元素?

    我正在尝试转换for loop到功能代码 我需要向前看一个值 也需要向后看一个值 是否可以使用流 以下代码是将罗马文本转换为数值 不确定带有两个 三个参数的reduce方法是否可以在这里提供帮助 int previousCharValue
  • 在 Windows 环境中使用 Gnustep 在 Objective-C 中进行编程

    我正在使用 Windows 并且想开始学习如何使用 Objective C 进行编程 我安装了 Gnustep 但无法确定如何构造和构建项目 等效 也找不到 IDE 请参阅Gnustep 入门 https stackoverflow com
  • 选择com的理由

    我想知道为什么人们会选择 Com 作为他的软件开发 技术 我的第一个想法是机器 编程语言的独立性 你的是啥呢 COM 是 Windows 上自动化和 IPC 的事实上的标准 尽管 Net 已经开始转移焦点 因此有些领域您根本没有 或没有 选
  • 在python中查找关键字后的单词[重复]

    这个问题在这里已经有答案了 我想查找出现在关键字 由我指定和搜索 之后的单词并打印出结果 我知道我应该使用正则表达式来做到这一点 我也尝试了一下 如下所示 import re s hi my name is ryan and i am ne
  • 如何从 Django 中的请求对象获取 URI?

    如何从 Django 中的请求对象获取 URI 有 request uri 吗 request META REQUEST URI or request get full path 你往往会产生大量琐碎的问题 你可以在文档 谷歌中轻松找到答案
  • NSTokenField 捕获一些 NSEvents

    我需要为 NSTokenField 和解决方案实现 Command Enter Command O 和 Esc 快捷键https stackoverflow com a 18486965 1067147 https stackoverflo