4

3つの異なるランダムな文字の3つのフィールドを持つログインページを持つアプリがあります。ユーザーが最後のフィールドを離れると、ソフトキーボードが消え、ユーザーは画面上の「ログイン」ボタンに触れることができます。

ハードウェアキーボード(Bluetoothまたは物理)が接続されている場合、「Enter」キーを押すことができるようにしたいと思います。ただし、ユーザーがフィールドにいないため、このキーが押されていることを検出する方法がわかりません。

どのクラスがキープレスイベントを処理するかについて誰かアドバイスがありますか?おそらく、これらを受信するために使用できるデリゲートがありますが、SDKを検索しても何も見つかりませんでした。

ありがとう

4

3 に答える 3

15

iOS 7.0以降の場合、UIViewControllerなどの任意のUIResponderからkeyCommandsプロパティのUIKeyCommandsを返すことができます。

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

迅速

// In a UIView/UIViewController subclass:
override var canBecomeFirstResponder: Bool {
    true
}

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

@objc func enterPressed() {
    print("Enter pressed")
}
于 2014-03-03T00:39:36.803 に答える
1

これを実現する1つの方法は、非表示の余分な(この場合は4番目の)テキストフィールドを用意することです。サイズを1x1ピクセルで、透明にします。次に、他の3つのテキストフィールドのいずれかがない場合に最初のレスポンダーにし、その非表示フィールドでテキスト変更イベントを探して、キー入力イベントをトリガーします。

ソフトウェアキーボードを表示したままにしたくない場合は、表示されているソフトウェアキーボードの通知を確認することもできます。

于 2010-09-15T16:07:43.750 に答える
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
}
于 2015-02-05T22:36:59.803 に答える