どうもです~。

「なかまばんく」アプリ版の開発で出会ったあれこれを書きま~す。

いま、最初の登録のフォームを作ってるとこ。
で、テキスト入力をタッチして、キーボードがと出てきた時に画面のしたのほうだと隠れちゃってみえなくなっちゃう。

そういえば、いままで作ったアプリは、そもそも入力させることもなかったし、あっても隠れないようなところに置いてしまえばなんともなかったのだけど、
さすがに、今回は、スクロールビューですらすら~っと動かしながら項目に入力させたいので、回避策をねらないといけなくなってしまった。

調べてみると、まあ、たいがいのひとは一度は通る道っぽく、たくさん見つかった。

みんなやってるのは、NSNotificationCenterさんにキーボードの出てくる時と引っ込む時に通知してもらうやり方のよう。

まず、ビューコンのappearのタイミングで

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

て書いておいて、ビューコンの中で、

- (void)keyboardShow:(NSNotification*)nt{
    CGRect rt = [[nt.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
~キーボードの高さ(rt.size.height)が取得できるので対策をする~
    
}


- (void)keyboardHide:(NSNotification*)nt{
    CGRect rt = [[nt.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
~戻す処理~
}


を定義すると、出たとき、引っ込んだときにそれなりの挙動をさせることができる。

あと、disappearのときに

    [[NSNotificationCenter defaultCenter] removeObserver:self  name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self  name:UIKeyboardWillHideNotification object:nil];

を書いておかないと、コントローラを破棄しても通知設定だけが残ってしまう。

やらないとエラーになるかなーと思って解除しないでやってみたらエラーにならなかったので、放置でもいいのかな。。?

keyboardShowとkeyboardHideの名前はなんでもいいのでやってみたいかたはお好きな名前でどうぞ!

フォームの画面は全面スクロールビューの中なので、キーボードの高さ分だけ、スクロールビュー自体の高さを小さくして、縦幅が狭くなったとこでスクロールはさせられる感じに対策しました。実にオーソドックスな対応~。

まあ、そんなこんなでがんばってまーす。

ではでは