我希望能够在用户编辑a时处理三种不同的组合键NSTextField
:
这些组合中的每一个都会有不同的响应。
理想情况下,我想仅通过IB来实现这一目标。但是,我的理解是,可可粉每个控件只允许发送一个动作。
我可以将此发送的动作绑定到,IBAction
并将设置NSTextField
为仅在按下返回键时才发送,但是我无法找到一种方法来获取当前按下的修饰键(因为该动作仅接收(id)sender
,而不是事件对象)。那可能吗?
另外,我想可以继承NSTextField
,覆盖keyDown:
和手动运行适当的操作。但是,我想不起来如何在IB中正确连接。(我可以将aIBOutlet
用作目标,但我想不出一种连接特定方法的方法。)我也担心这种方法的效率。
在上处理某些关键事件的正常方法是NSTextField
什么?
我目前倾向于的方法是编写一个自定义协议,并在文本字段子类上放置一个出口:
@property (weak, nonatomic) IBOutlet id<TextFieldReturnHandler> target
然后可以从按键事件中调用它。不过,这似乎确实令人费解。
您可以将发送的动作连接到控制器上的方法:
- (IBAction)cellDidEndEditing:(id)sender;
如果只希望在按下返回键时才调用此方法,而不是例如在用户单击时才调用此方法,则可以将IB中NSTextField上的Action属性设置为“发送时仅输入”,而不是“发送时”结束编辑”。
在此方法中,您可以使用以下方法访问事件:
NSEvent *evt = [NSApp currentEvent];
在检查事件是否有效之后,您可以获取必要的修饰符标志并对其进行操作:
if (evt && evt.type == NSKeyDown) {
evt.modifierFlags // NSShiftKeyMask, NSCommandKeyMas, NSAlternateKeyMask
// Perform actions
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句