6

重複の可能性:
iPad に外部キーボードが存在するかどうかを検出するにはどうすればよいですか?

ユーザーが iPhone アプリの UI でテキスト フィールドの編集を開始したときに、テキスト フィールドとキーボードの間のスペースを使用して、関連するオプションのリストを表示したいと考えています。

iOS の通常の (画面上の) キーボードを使用すると、いくつかの便利な通知を聞くことができ、その間にリスト用にどれだけのスペースが残っているかを判断するのに役立ちます。

ただし、ハードウェア キーボードを接続する (またはその使用をシミュレートする) と、これらの通知は投稿されなくなります。それほど予想外ではありませんが、これは私に少しの課題を残します. ユーザーがハードウェア キーボードを使用している場合は、リスト用のスペースが増えます。

しかし、トリガーされた通知またはリッスンするデリゲート メソッドがない場合、ユーザーがハードウェア キーボードを持っているかどうかをどのように判断できますか? それともありますか?

また、考慮すべきことは、ユーザーが最初にソフトウェア キーボードでアプリを使用し、次にハードウェア キーボードを接続して、アプリでの作業を続行できることです。その時点で、ソフトウェア キーボードは非表示になりますが、ユーザーはまだテキスト フィールドを編集しています。

この質問に対して古いだまされた人が 1 人見つかりましたが、回答がありません。

4

1 に答える 1

3

ハードウェアキーボードが接続されている場合(そうでない場合は、画面キーボードの上部に接続されている場合)、入力アクセサリビューが画面の下部に表示されます。

入力ビューのアクセサリビューを空UIViewのサイズに設定しますCGRectZeroどちらの場合も表示/非表示の通知を受け取り、通知のuserinfoディクショナリのメトリックから使用可能な画面サイズを決定できます。

UIView *inputAccessoryView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
inputAccessoryView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
textView.inputAccessoryView = inputAccessoryView;

…

- (void)keyboardWillShow:(NSNotification*)aNotification {
  NSLog(@"%@", [aNotification userInfo]);
}

ログに記録されたメトリック-フレームインUIKeyboardFrameEndUserInfoKeyが画面外にあることに注意してください

// (NSDictionary *) {
//     UIKeyboardAnimationCurveUserInfoKey = 0;
//     UIKeyboardAnimationDurationUserInfoKey = "0.25";
//     UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {768, 264}}";
//     UIKeyboardCenterBeginUserInfoKey = "NSPoint: {384, 891}";
//     UIKeyboardCenterEndUserInfoKey = "NSPoint: {384, 1155}";
//     UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 758}, {768, 264}}";
//     UIKeyboardFrameChangedByUserInteraction = 0;
//     UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 1022}, {768, 264}}";
// }

更新-関連する質問のuser721239の回答と非常によく似ています。

于 2012-11-07T18:18:17.377 に答える