好的,这是我的情况:
NSTextField
NSTextDidEndEditingNotification
通知这是最后一种方法:
- (void)handleConsoleInput:(NSNotification*)not
每当(至少从我注意到的)用户开始发出此通知:
NSTextField
但是,我(显然)希望将其限制为“返回”键。
我该怎么做?我已经测试了发送的NSNotification
对象的内容,并且没有关于触发textDidEndEditing:
通知的密钥代码或事件的信息。
有什么想法吗?
修改
刚注意到:
NSTextField
时,[[not userInfo] valueForKey:@"NSTextMovement"]
变为0
,这意味着此案例可以进行过滤。NSTextMovement
值>0
?答案 0 :(得分:3)
如果您确实认为订阅通知是最有效的方式,那么您可以获得更多权力,但我觉得您可以更轻松地将NSTextField子类化并覆盖相关的事件方法。但是,这无关紧要,这里是我认为应该是这样的快速实现:
- (void)handleConsoleInput:(NSNotification*)notification {
NSUInteger textMove = [notification.userInfo[@"NSTextMovement"] unsignedIntegerValue];
if (textMove != NSReturnTextMovement) {
[self.window makeFirstResponder:notification.object];
}
}
结束事件的类型在NSText的文档中列举。
答案 1 :(得分:2)
的可能值
NSDictionary *userInfo = [notification userInfo];
int movement = [[userInfo objectForKey:@"NSTextMovement"] intValue];
NSTextDidEndEditingNotification
中的在“NSText类参考”中记录为Movement Codes:
enum {
NSIllegalTextMovement = 0,
NSReturnTextMovement = 0x10,
NSTabTextMovement = 0x11,
NSBacktabTextMovement = 0x12,
NSLeftTextMovement = 0x13,
NSRightTextMovement = 0x14,
NSUpTextMovement = 0x15,
NSDownTextMovement = 0x16,
NSCancelTextMovement = 0x17,
NSOtherTextMovement = 0
};