Как обнаружить события клавиатуры на аппаратной клавиатуре на iPhone (iOS) - PullRequest
3 голосов
/ 15 сентября 2010

У меня есть приложение со страницей входа, которая имеет три поля для трех разных случайных символов.Когда пользователь покидает последнее поле, программная клавиатура исчезает, и пользователь может нажать кнопку «Войти» на экране.

Когда подключена аппаратная клавиатура (Bluetooth или физическая), я бы хотел, чтобыв состоянии нажать «войти» на него.Однако, поскольку пользователь не находится в поле, я не вижу, как обнаружить нажатие этой клавиши.

Кто-нибудь посоветует, какой класс обрабатывает события нажатия клавиш?Предположительно, есть делегат, которого я могу использовать, чтобы получить их, но мои поиски через SDK ничего не нашли.

Спасибо

Ответы [ 3 ]

14 голосов
/ 03 марта 2014

Для iOS 7.0 или более поздней версии вы можете вернуть UIKeyCommands для свойства keyCommands из любого UIResponder, такого как 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")
}
1 голос
/ 06 февраля 2015

В качестве ответа на ответ @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
}
1 голос
/ 15 сентября 2010

Один из способов сделать это - иметь скрытое дополнительное (4-е в вашем случае) текстовое поле. Сделайте его размером 1x1 px и прозрачным. Затем сделайте его первым респондентом, если любое из трех других текстовых полей не заполнено, и найдите события изменения текста в этом скрытом поле, чтобы вызвать событие ввода с клавиатуры.

Возможно, вы также захотите проверить уведомление о появлении программной клавиатуры, если не хотите, чтобы она также оставалась видимой.

...