如何正确处理NSTextField中的<return> +修饰符键?</return>

时间:2014-02-28 23:39:31

标签: objective-c cocoa nstextfield

我想在用户编辑NSTextField时能够处理三种不同的组合键:

  • ⌘↩
  • ⇧↩

这些组合中的每一种都会有不同的反应。

理想情况下,我想通过IB单独实现这一目标。但是,我的理解是Cocoa只允许每个控件发送一个动作。

我可以将此发送的操作绑定到IBAction,并将NSTextField设置为仅在按下返回键时发送它,但我找不到一种方法来获取当前的修改键按住(因为操作只接收(id)sender,而不是事件对象)。这可能吗?

或者,我想可以继承NSTextField,覆盖keyDown:,并手动运行相应的操作。但是,我想不出如何在IB中正确连接它。 (我可以使用IBOutlet作为目标,但我想不出一种连接特定方法的方法。)我也担心这种方法的效率。

处理NSTextField上某些关键事件的正常方法是什么?


我现在倾向于采用的方法是编写自定义协议并在文本字段子类上添加插座:

@property (weak, nonatomic) IBOutlet id<TextFieldReturnHandler> target

然后可以从keypress事件中调用。但这似乎真的很复杂。

1 个答案:

答案 0 :(得分:1)

您可以将发送的操作连接到控制器上的方法:

- (IBAction)cellDidEndEditing:(id)sender;

如果您只想在按下返回键时调用此方法,而不是,例如,当用户点击时,您可以将IB中NSTextField上的Action属性设置为“仅在Enter Enter”而不是'发送结束编辑'。

在此方法中,您可以使用以下命令访问该事件:

NSEvent *evt = [NSApp currentEvent];

在检查事件是否有效后,您可以获取必要的修饰符标志并执行操作:

if (evt && evt.type == NSKeyDown) {
    evt.modifierFlags // NSShiftKeyMask, NSCommandKeyMas, NSAlternateKeyMask

    // Perform actions
}