xcode – 获取NSTextField的keyDown事件

xcode – 获取NSTextField的keyDown事件,第1张

概述在 xcode的最后一个版本中,我试图获取NSTextField的keyDown事件. 然而,尽管在互联网上有多个教程(代表,控制器……),我仍然无法接收它. 对我来说有什么简单的暗示吗? 谢谢 ! 我厌倦了所有的非答案,以其他方式做到这一点,所以我放下了我的头,找到了一种方法来使这项工作.这不是直接使用keydown事件,而是使用块中的keydown.而这种行为正是我想要的. 子类化文本字段 . 在 xcode的最后一个版本中,我试图获取NSTextFIEld的keyDown事件.
然而,尽管在互联网上有多个教程(代表,控制器……),我仍然无法接收它.

对我来说有什么简单的暗示吗?

谢谢 !

解决方法 我厌倦了所有的非答案,以其他方式做到这一点,所以我放下了我的头,找到了一种方法来使这项工作.这不是直接使用keydown事件,而是使用块中的keydown.而这种行为正是我想要的.

子类化文本字段

.H

@interface LQRestrictedinputTextFIEld : NSTextFIEld

.M

在成为第一响应者设置本地事件

static ID eventMonitor = nil;- (BOol)becomeFirstResponder {    BOol oktochange = [super becomeFirstResponder];    if (oktochange) {        [self setKeyboardFocusRingNeedsdisplayInRect: [self bounds]];        if (!eventMonitor) {            eventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event) {                Nsstring *characters = [event characters];                unichar character = [characters characteratIndex:0];                Nsstring *characterString=[Nsstring stringWithFormat:@"%c",character];                NSArray *valIDNonAlphaNumericArray = @[@" ",@"(",@")",@"[",@"]",@":",@";",@"\'",@"\"",@".",@"<",@">",@",",@"{",@"}",@"|",@"=",@"+",@"-",@"_",@"?",@"#",@(NSDownArrowFunctionKey),@(NSUpArrowFunctionKey),@(NSleftArrowFunctionKey),@(NSRightArrowFunctionKey)];                if([[NSCharacterSet AlphanumericCharacterSet] characterIsMember:character] || character == NSCarriageReturnCharacter || character == NSTabCharacter || character == NSDeleteCharacter || [valIDNonAlphaNumericArray containsObject:characterString ] ) { //[NSCharacterSet AlphanumericCharacterSet]                }  else {                    NSBeep();                    event=nil;                }                return event;            } ];        }    }    NSLog(@"become first responder");    return oktochange;}

文本字段编辑结束后删除事件

此外,如果您使用ARC我注意到您可能需要将textvIEw字符串分配给stringValue.我nslog了stringValue并保留了值.如果没有nslog,我必须将通知对象字符串分配给stringValue以防止它被释放.

-(voID) textDIDEndEditing:(NSNotification *)notification {    [NSEvent removeMonitor:eventMonitor];    eventMonitor = nil;    NSTextVIEw *textVIEw=[notification object];    self.stringValue=textVIEw.string;}
总结

以上是内存溢出为你收集整理的xcode – 获取NSTextField的keyDown事件全部内容,希望文章能够帮你解决xcode – 获取NSTextField的keyDown事件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1101786.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存