Objective c 如何正确处理<;回报>+;NSTextField中的修改器键?
当用户编辑Objective c 如何正确处理<;回报>+;NSTextField中的修改器键?,objective-c,cocoa,nstextfield,Objective C,Cocoa,Nstextfield,当用户编辑NSTextField时,我希望能够处理三种不同的组合键: ↩ ⌘↩ ⇧↩ 这些组合中的每一个都将得到不同的响应 理想情况下,我希望通过IB来实现这一点。然而,我的理解是Cocoa只允许每个控件发送一个操作 我可以将此已发送的操作绑定到iAction,并将NSTextField设置为仅在按下返回键时发送,但我找不到方法获取当前按下的修改器键(因为该操作只接收(id)发送方,而不是事件对象)。可能吗 或者,我想可以将NSTextField子类化,覆盖keyDown:,并手动运行适当的
NSTextField
时,我希望能够处理三种不同的组合键:
- ↩李>
- ⌘↩李>
- ⇧↩李>
iAction
,并将NSTextField
设置为仅在按下返回键时发送,但我找不到方法获取当前按下的修改器键(因为该操作只接收(id)发送方
,而不是事件对象)。可能吗
或者,我想可以将NSTextField
子类化,覆盖keyDown:
,并手动运行适当的操作。然而,我想不出如何在IB中正确地连接这一点。(我可以使用IBOutlet
作为目标,但我想不出一种连接特定方法的方法。)我还担心这种方法的效率
处理NSTextField
上某些关键事件的正常方式是什么
我目前倾向于编写一个自定义协议,并在文本字段子类上设置一个出口:
@property (weak, nonatomic) IBOutlet id<TextFieldReturnHandler> target
@property(弱、非原子)IBOutlet id目标
然后可以通过按键事件调用。不过,这似乎很复杂。您可以将发送的操作连接到控制器上的一个方法:
- (IBAction)cellDidEndEditing:(id)sender;
如果您只希望在按下返回键时调用此方法,而不希望在用户单击时调用此方法,则可以将IB中NSTextField上的Action属性设置为“仅在回车时发送”,而不是“结束编辑时发送”
在此方法中,您可以通过以下方式访问事件:
NSEvent *evt = [NSApp currentEvent];
检查事件是否有效后,可以获取必要的修改器标志并对其执行操作:
if (evt && evt.type == NSKeyDown) {
evt.modifierFlags // NSShiftKeyMask, NSCommandKeyMas, NSAlternateKeyMask
// Perform actions
}
在带有修改器标志的enter键上不会调用该操作。