4

ユーザーがタッチスクリーンまたはBluetoothキーボードを使用してナビゲートするiPadアプリがあります。私は焦点が合っているいくつかの隠されたtextView(ファーストレスポンダー)を持っています、そしてここで私はキーボードから入力されたものを検出します。

しかし、キーボードを切断すると問題が発生し、仮想キーボードが表示されます。

Bluetoothキーボードが接続されているかどうかを確認し、viewDidLoadなどでファーストレスポンダーを設定または辞任することはできますか?

また

通知があります:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil];

KeyboardWillAppearがトリガーされたときに、何らかの方法でキーボードを非表示にできますか? [textView resignFirstResponder]を試しましたが、成功しませんでした:|

4

3 に答える 3

5

そのためにperformSelector:を使用できます。

- (void)hideKeyboard:(UITextView *)textView {
    [textView resignFirstResponder];
}

- (void)keyboardWillAppear:(NSNotification *)notification { 
    UITextView *textView = (UITextView *)[self.view viewWithTag:TEXTVIEW_TAG];

    [self performSelector:@selector(hideKeyboard:) withObject:textView];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil];
}
于 2012-05-25T20:32:38.300 に答える
5

inputViewを透明なビューに設定できます。

UIView *emptyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
emptyView.backgroundColor = [UIColor clearColor];
textView.inputView = emptyView;

理論的には、画面キーボードを空のビューに設定して、表示されないようにします。フレームのないビューを受け入れない場合は、幅と高さを1に上げてみてください。外部キーボードには影響しません。デバイスに表示されないだけです。

于 2012-06-01T00:58:24.030 に答える
0

ファーストレスポンダーになるプロセスはおそらくまだ行われていないため、textViewのファーストレスポンダーの辞任をディスパッチキューにスケジュールする必要があります。XCodeのディスパッチテンプレートを使用した簡単なソリューション:

int64_t delayInSeconds = 0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self.textView resignFirstResponder];
});
于 2012-11-20T22:33:00.590 に答える