2

UITableViewのサイズを変更し、このフィールドが発生するとUITextFieldを含むUIViewをスライドさせます。UITextFieldが起動されたときに、同期してUIViewをスライドしてUITableViewのサイズを変更します。

enter image description here enter image description here

今、私はこのコードを持っている:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDuration:0.3]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    [myView setFrame:CGRectMake(myView.frame.origin.x, myView.frame.origin.y - 167, myView.frame.size.width, myView.frame.size.height)]; // 216 (keyboard's height) - 49 (tabbar's height) = 167 

    [UIView commitAnimations]; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDuration:0.3]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    [myView setFrame:CGRectMake(myView.frame.origin.x, myView.frame.origin.y + 167, myView.frame.size.width, myView.frame.size.height)]; 

    [UIView commitAnimations]; 
    return TRUE; 
} 

問題はアニメーションアップアニメーションやmyViewスライドアップキーボードのスライドが同期していないということですこれらは、2つの簡単なモックアップです。これらの2つのアニメーションを完全に同期させるには

キーボードが表示されているときにUITableViewのサイズを変更する方法と、キーボードが隠れるときに元の高さに戻す方法はありますか?

+0

[becomeFirstResponderまたはresignFirstResponderのイベントでキーボードの上にオブジェクトを置くことは可能ですか?](http://stackoverflow.com/questions/8704137/keeping-object-on-top-of-keyboard-in-the -event-of-become firstresponder-or-resign) –

+0

一番下に表示するUIViewをtableFooterViewとして使用する方法はありますか?今のすべてがUITableViewControllerにラップされていれば、自由に使いたい機能が得られます。 – Till

+0

@till no UIViewを常に表示したいので。 –

答えて

3

短い答えは、UIKeyboardWillShowNotificationUIKeyboardWillHideNotificationに登録する必要があるということです。これらの通知には、キーボードアニメーションの正確なパラメータが含まれています。

長い答えはhttps://stackoverflow.com/a/8704371/77567です。

タブバーについて:私がリンクした答えは、キーボードが閉じられたときに画面の下端までスライドさせたいと仮定しています。タブバーの端までスライドさせたいので、キーボードが隠れているか表示されているかを調べる必要があります(note.nameにチェック)。表示されている場合は、ビューの現在のフレームをインスタンス変数に保存する必要があります。隠れている場合は、ビューの新しいフレームを、キーボードの終了フレームに基づいて設定するのではなく、インスタンス変数に保存したフレームに設定する必要があります。

+0

お返事ありがとうございます。コードは、キーボードが表示され、フィールドが上にスライドするとうまく動作しますが、キーボードが非表示になり、フィールドが下にスライドすると機能しません。特定の方法では、フィールドが下にスライドすると、それは 'origin.y = 363'でスライドし、' UITabBar'(49の高さ)によって隠れるでしょう。 'CGRect keyboardFrameForTextField = [self.commentView.superview convertRect:keyboardFrame fromView:nil];'どのくらい正確に?あなたはタブバーで修正する方法を知っていますか? –

+0

私は私の答えを修正しました。 –

+0

ありがとう、あなた!素晴らしいヒント! –

関連する問題