23

iOS デバイスに接続された Bluetooth キーボードで Escape (および Ctrl や Alt などの他のキーの組み合わせ) が押されたことを検出する方法を見つけようとしています。

一部の回答は、これが不可能であることを示唆しているようです。ただし、Appstore にはこれを行うアプリ (iSSH など) があるため、パブリック API を何らかの方法で使用できると思います。

独自の UITextInput を作成しようとしましたが、Escape キーが押されても何も受け取りません。iPad が応答する可能性がある API の唯一の部分は、VoiceOver が有効になっている場合です (Escape は Safari と同じように機能します)。

また、NSNotificationCenter から観察できる何かが役立つかどうかも確認しようとしましたが、まだ何も見つけられていません。

提案を歓迎します。私はこれを1日ハッキングしてきましたが、今は少し途方に暮れています。

4

3 に答える 3

17

You can do this in iOS 7. たとえば、エスケープ キーを実装するには、UITextView をオーバーライドし、次のメソッドをクラスに配置します。

- (NSArray *) keyCommands {
    UIKeyCommand *esc = [UIKeyCommand keyCommandWithInput: UIKeyInputEscape modifierFlags: 0 action: @selector(esc:)];
    return [[NSArray alloc] initWithObjects: esc, nil];
}

- (void) esc: (UIKeyCommand *) keyCommand {
    // Your custom code goes here.
}

以前のバージョンの OS では keyCommands メソッドが呼び出されないため、iOS 7 を使用していることを確認する必要はありません。

于 2014-01-03T19:38:19.457 に答える
6

あなたが達成しようとしていることに対するパブリック API はないため、これは拒否につながる可能性があります。

危険を冒しても構わない場合は、これを試すことができます。基本的sendEvent:に、あなたのUIApplication.

于 2013-02-18T16:26:49.023 に答える
5

私の知る限り、これはパブリック API を使用して行うことはできません。少し検索しましたが、escキーが認識されません。私がしなかった唯一のことは試してみることですiSSH(9 ユーロかかります :-) が、AppStore の説明を読むとESC、ハードウェア (Bluetooth) キーボードのキーが機能しないことは明らかです。

  • 徹底的なキー構成のサポート。キーがありarrowます (ポップアップまたはツールバーによる)。ctrlaltesctab、キー ( )、shiftキー、、およびリストされていないキーについては、それらを追加するための複数の手段を提供します。Fn1-10`PgUpPgDown

  • arrowキー、キー、およびサーバーまたはターミナルのいずれかでのオプション キー マッピングによるキーfunctionの再マッピングのBluetooth キーボード サポート。有効にすると、+プレスは同等の+プレスにマップされます。ctrlX11/VNCOptionkeyCtrlkey

ご覧のとおり、2 行目にはESCキーが記載されていません。さらに、この(古い)投稿を見つけました。

編集:

_gsEvent最後の更新として、バイナリの内部を「隠す」方法を見つけました。ただし、Apple の静的アナライザーがそれを見つけられるかどうかはわかりません。トリックは簡単です..._gsEvent実行時にセレクター(および他のプライベートセレクター)を作成してください!

-(void)sendEvent:(UIEvent *)event
{

    SEL aSelector = NSSelectorFromString([self theSelector]);
    if ([event respondsToSelector:aSelector]) {

        NSLog(@"Event: %@", event.description);
    }

    [super sendEvent:event];
}

-(NSString *)theSelector
{
    // compose the keyword as you prefer
    NSString *sel = [NSString stringWithFormat:@"%@g%@%@ent", @"_", @"s", @"Ev"];
    return sel;
}

バイナリ内を検索しようとしましたが_gsEvent、明らかに実行時にのみ作成されるため、キーワードが見つかりません。
お役に立てれば。

于 2013-02-18T16:30:52.213 に答える