
然而,尽管在互联网上有多个教程(代表,控制器……),我仍然无法接收它.
对我来说有什么简单的暗示吗?
谢谢 !
解决方法 我厌倦了所有的非答案,以其他方式做到这一点,所以我放下了我的头,找到了一种方法来使这项工作.这不是直接使用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事件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)