如何在iPhone(iOS)上的硬件键盘上检测键盘事件

时间:2010-09-15 11:28:12

标签: iphone objective-c ios keyboard-events

我有一个带有登录页面的应用程序,该页面包含三个不同随机字符的字段。当用户离开最后一个字段时,软键盘消失,用户可以触摸屏幕上的“登录”按钮。

当连接了硬件键盘(蓝牙或物理)时,我希望能够点击“输入”。但是因为用户不在某个字段中,所以我看不到如何检测被按下的键。

有人会就哪个班级处理重点新闻事件提出建议吗?据推测,我可以使用一个代表来接收这些代理,但我在SDK中的搜索没有找到任何内容。

由于

3 个答案:

答案 0 :(得分:13)

对于iOS 7.0或更高版本,您可以从任何UIResponder返回keyCommands属性的UIKeyCommands,例如UIViewController:

<强>目标C

// In a view or view controller subclass:
- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (NSArray *)keyCommands
{
    return @[ [UIKeyCommand keyCommandWithInput:@"\r" modifierFlags:0 action:@selector(enterPressed)] ];
}

- (void)enterPressed
{
    NSLog(@"Enter pressed");
}

<强>夫特

// In a UIView/UIViewController subclass:
override func canBecomeFirstResponder() -> Bool {
    return true
}

override var keyCommands: [UIKeyCommand]? {
    return [ UIKeyCommand(input: "\r", modifierFlags: [], action: #selector(enterPressed)) ]
}

@objc func enterPressed() {
    print("Enter pressed")
}

答案 1 :(得分:1)

实现此目的的一种方法是使用隐藏的额外(在您的情况下为第4个)文本字段。使其尺寸为1x1像素且透明。然后在任何其他3个文本字段都没有时将其设为第一个响应者,并在该隐藏字段中查找文本更改事件以触发您的键输入事件。

如果您不想让软件键盘保持可见,您可能还需要检查软件键盘的通知。

答案 2 :(得分:1)

作为@Patrick回复的后续内容,以下是您在Xamarin.iOS中的操作方法:

public override bool CanBecomeFirstResponder
{
    get { return true; }
}

public override UIKeyCommand[] KeyCommands
{
    get
    {
         return new[]{ UIKeyCommand.Create((NSString)"\r", (UIKeyModifierFlags)0, new ObjCRuntime.Selector("enterPressed")) };
    }
}

[Export("enterPressed")]
private void OnEnterPressed()
{
    // Handle Enter Key
}