13

キーボードが表示されたときとキーボードが非表示になったときの 2 つのイベントを処理できます。iOS 8.2 以前ではすべて正常に動作しました。

しかし、キーボード言語を変更したときにイベントを処理する方法は? 英語キーボードを絵文字キーボードに変更すると、絵文字キーボード (ios 8.3 の場合) の高さが大きくなり、コンテンツが隠れてしまいます。

それとも、iOS 8.3 の絵文字キーボードの高さを制御する方法をご存知でしょうか? ここに画像の説明を入力

4

4 に答える 4

13

わかった。古いコードを見て、2 つのオブザーバー ( / ) を使用していないことを思い出しました。各イベントで発生する単一のオブザーバー ( ) を使用します: キーボードの非表示、キーボードの表示、キーボードの変更フレーム。UIKeyboardDidShowNotificationUIKeyboardDidHideNotificationUIKeyboardWillChangeFrameNotification

私の場合、テキスト ボックスと送信ボタンは にネストされており、これはの にUIView追加されたビューです。viewUIViewController

オブザーバーを追加し、オブザーバーviewDidAppearを削除しviewWillDisappearます(ビューがアクティブでないときに通知が発生するのを避けるため)。

上記の情報はあなたの場合には必要ありません。情報のために追加しただけです。関連するコードは次のとおりです。

オブザーバーを追加:

- (void) viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
}

ハンドル通知:

- (void) keyboardWillChangeFrame:(NSNotification*)notification {

    NSDictionary* notificationInfo = [notification userInfo];

    CGRect keyboardFrame = [[notificationInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

    [UIView animateWithDuration:[[notificationInfo valueForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]
                          delay:0
                        options:[[notificationInfo valueForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]
                     animations:^{

                         CGRect frame = self.textViewContainer.frame;
                         frame.origin.y = keyboardFrame.origin.y - frame.size.height;
                         self.textViewContainer.frame = frame;

                     } completion:nil];
}

frame.origin.y...正しい計算を行うには、行をいくつか調整する必要がある場合があります。UITabBarController下部にバーがあるかどうかはわかりません。ここで最も安全な方法は次のとおりです。

frame.origin.y = self.view.frame.size.height - keyboardFrame.size.height - X;

XVC が画面全体をカバーする場合は 0 です。そうでない場合は、下のバーの高さを使用します。

于 2015-04-29T10:16:09.037 に答える