How to detect keyboard events on hardware keyboard

2019-05-19 08:16发布

I have an app with a login page that has three fields for three different random characters. When the user leaves the last field, the soft keyboard disappears and the user can touch a "login" button on screen.

When there is a hardware keyboard (bluetooth or physical) attached, I'd like to be able to hit "enter" on it. However because the user is not in a field, I can't see how to detect this key being pressed.

Would anyone have advice on which class handles key press events? Presumably there is a delegate that I can use to receive these but my searches through the SDK haven't found anything.

Thanks

3条回答
Viruses.
2楼-- · 2019-05-19 08:40

For iOS 7.0 or later, you can return UIKeyCommands for the keyCommands property from any UIResponder, such as UIViewController:

Objective-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");
}

Swift

// 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")
}
查看更多
别忘想泡老子
3楼-- · 2019-05-19 08:49

As a followup to the response by @Patrick, here is how you do it in 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
}
查看更多
Juvenile、少年°
4楼-- · 2019-05-19 08:59

One way to accomplish this is to have a hidden extra (4th in your case) text field. Make it 1x1 px in size and transparent. Then make it the first responder when any of your other 3 text fields are not, and look for text change events in that hidden field to trigger your key input event.

You might also want to check the notification for a software keyboard appearing if you don't want it to stay visible as well.

查看更多
登录 后发表回答