0

キーボードが表示されたときに UIView を新しい位置にアニメーション化したかったので、UIKeyboardWillShowNotificationと を使用しましたUIKeyboardWillChangeFrameNotification。問題は、キーボードなしでデバイスを回転させると、ビューのサイズが自動調整され、必要に応じて回転することです。見た目は完璧です。

残念ながら、キーボードが表示されている状態でデバイスを回転すると、これらの通知が送信されるため、それに応じて UIView アニメーションを実行すると、奇妙なアニメーションが表示されます。新しい位置にジャンプし、角を曲がって新しい向きに固定されているように見えると最もよく説明できます。おそらく、あなたは私が話していることを知っています。

デバイスが回転していることを検出したり、キーボードが表示されているときに回転するときに問題に対処したりする方法はありますか?

4

3 に答える 3

0

次のコードが役立つと思います..

@property(nonatomic,strong)BOOL keyBoardShow;


- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeShown:)
                                                 name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];


    [super viewDidLoad];
}
-(void)keyboardWillBeShown:(NSNotification *)aNotification {
    keyBoardShow = YES;
}


-(void)keyboardWillBeHidden:(NSNotification *)aNotification {
    keyBoardShow = NO;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    if (keyBoardShow) {
        // Do the needful when the keyboard is shown

    }else{

    }
}

keyboardWillBeShown および keyboardWillBeHidden デリゲート メソッドで bool 値を設定するだけです。そして、willRotateToInterfaceOrientation で uiview の位置を設定します。

于 2013-08-05T17:31:19.380 に答える
-1

組み込みの通知に頼る代わりに、そもそも何がキーボード表示をトリガーしているのかに頼ってみませんか? 特定の UITextField が最初の応答者になると、キーボードがポップアップすると思います。あなたはそれを使うことができるはずです。

その UITextField のデリゲートを登録し、-textFieldDidBeginEditing: を実装します。デリゲートはビュー コントローラーである必要があります。次に、疎結合を維持するために、デリゲートから独自の通知を投稿し、ビューを登録します。

少し手間がかかりますが、より優れた制御が可能になります。

- (void)textFieldDidBeginEditing:(UITextField *)textField  

Apple ドキュメント: UITextFieldDelegate プロトコル

于 2013-08-05T18:39:50.167 に答える