2

ユーザーが Bluetooth キーボードを接続したときに、command + a、command + s、command + x、command + v などの基本的なコマンド キーの組み合わせをより多くサポートするだけの iOS アプリがあります。

私はこれが可能であることを知っています。Textastic や他の多くの編集アプリなどのアプリケーションは、これらの機能をサポートしています。

UIResponder (ポップアップ メニューでのみ使用されているようです)、UIKeyInput、UITextInput[Delegate]、およびその他の API ドキュメントを調べましたが、これを行う方法については言及していません。

(BOOL)canPerformAction:(SEL)action withSender:(id)sender を使用して、UIMenuController に表示されるオプションを簡単にサポートできます。ただし、Bluetooth キーボードが接続されている場合、このメソッドは呼び出されないようです。したがって、キーボード専用の別のメソッドを実装するか、他の何かを実装する必要があります。

テキストサブシステムがアクションの実行を担当している可能性があると思います。しかし、私が見つけることができるドキュメントはありません! また、操作の実行時に UITextInput デリゲート メソッドが呼び出されることはありません。私はほとんど、解決策は非公開であり、これらの機能にアクセスする方法について Apple に具体的に尋ねる必要があると考えています (これは私が行ったばかりです)。

アップデート:

positionFromPosition:inDirection:offset: は、矢印キーが押されたことを検出するために使用するメソッドです。iOS がこのメソッドを呼び出した後、setSelectedText: を呼び出します。配管の残りの部分を処理する必要があります。

更新 2:

私が持っていたすべての質問に答えることができました。回答については、マークされたソリューションを参照してください。

4

2 に答える 2

6

理解した。切り取り、コピー、貼り付けをサポートする UIMenuController メソッドを既に実装していました。これらの機能を実装し、Bluetooth キーボードを物理デバイスに接続すると、基本的なコマンド オプション (a、c、x、v など)が自動的に取得されます。UIMenuController UIResponderStandardEditActions を完全に実装する必要があります。iOS シミュレーターでは、コマンド (a、c、x、v など) のアクションはトリガーされないことに注意してください。これらの機能は、Bluetooth キーボードが物理デバイスに接続されている場合にのみ機能することを確認できました。シミュレーターで「ハードウェア キーボードのシミュレート」が有効になっていたとしてもです。

コントロール/オプションキーについて; UITextInput を完全に実装すると、矢印キー、矢印キー + コントロール、矢印キー + オプションなどを使用するときに、すべての移動機能も取得できます。これを実装する方法のより良いアイデアについては、Apple が提供する SimpleTextInput サンプル コード ファイルを参照してください。 .

そうは言っても、独自のキーボードの組み合わせを作成することはできません。Apple は、私がそれらの機能が必要な場合はチケットを作成するように私に求めましたが、私はそれを望んでいません...彼らが提供した以上のものをサポートすることは本当に気にしません。そのため、Command+s (保存) などのコマンドは現在使用できません。

あなたのための楽しい小さな物語; Apple は、API では (command+c、command+v などを使用して) 私がやりたかったことは不可能だと言いました。それは、あなたが彼らの技術的専門知識がどれほど役に立ったかを示していると思います。非常に残念です。

アップデート:

iOS 7 以降、Apple はキーコマンド、esc などをキャプチャすることを簡単にしました。さまざまなキーをキャプチャする方法の例を次に示します。

return @[[UIKeyCommand keyCommandWithInput:UIKeyInputEscape modifierFlags:0 action:@selector(escapeKeyPressed:)],
         [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierCommand action:@selector(commandFindPressed:)],
         [UIKeyCommand keyCommandWithInput:@"s" modifierFlags:UIKeyModifierCommand action:@selector(commandSavePressed:)],
         [UIKeyCommand keyCommandWithInput:@"b" modifierFlags:UIKeyModifierControl action:@selector(controlBKeyPressed:)],
         [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierControl action:@selector(controlFKeyPressed:)],
         [UIKeyCommand keyCommandWithInput:@"r" modifierFlags:UIKeyModifierControl action:@selector(controlRKeyPressed:)]
         ];
...

- (void)commandSavePressed:(UIKeyCommand *)keyCommand
{
    [self saveFile];
}
于 2012-07-20T21:32:30.777 に答える
0

残念ながら、パブリック API でこれを行う方法はありません。たとえば、iPadでワイヤレスキーボードを使用しているので、以前に調べました。ただし、コマンド キーの代わりにオプション キーを使用してもかまわない場合は、回避策を実装できます。

アプリケーションのテキスト エディター タイプを作成すると仮定すると、これを行うことができます。入力された各文字をポーリングし、switch ステートメントを使用して特定の「特殊機能文字」と比較します。ユーザーがオプションを押したままキーを入力すると、特殊文字 ("、»、ü など) が挿入されます。これらの文字の Unicode 値を見つけて、これらのキーのいずれかが押されたときに soecific アクションを実行するだけです。また、option キーに加えて shift キーを押したままにすると、別の文字が出力されることに注意してください。

于 2012-06-26T05:31:53.407 に答える