gpt4 book ai didi

xcode - 获取 NSTextField 的 keyDown 事件

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

在 xcode 最新版本中,我试图获取 NSTextField 的 keyDown 事件。然而,尽管遵循了互联网上的多个教程(代表、 Controller ......),我仍然无法收到它。

有什么简单的提示吗?

谢谢!

最佳答案

我厌倦了人们以其他方式做这件事的所有非答案,所以我埋头苦干,想出了一种方法来实现这项工作。这不是直接使用 keydown 事件,而是使用 block 中的 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。我对 stringValue 进行了 nslog,并且该值被保留。如果没有 nslog,我必须将通知对象字符串分配给 stringValue 以防止其被释放。

-(void) textDidEndEditing:(NSNotification *)notification {
[NSEvent removeMonitor:eventMonitor];
eventMonitor = nil;

NSTextView *textView=[notification object];
self.stringValue=textView.string;
}

关于xcode - 获取 NSTextField 的 keyDown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868489/

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