キーボードの出し入れ と 改良版

投稿者: | 2012/07/27

ツールバーのスワイプでキーボードを出し入れする | 極上の人生

今回は以前に書いた記事(上記)の改良版。
キーボードの表示 ⁄ 非表示に合わせて上下するツールバー。

先だっての「まいど普通の名古屋オフ」で@toshiya240 さんに見せていただいたヤツが凄く動きが良かった。

以前、私が書いた記事のやり方だと、キーボードとツールバーの動きに時間差がある。
@toshiya240 さんに見せてもらったサンプルは、時間差ゼロで動きが追従していた。

長いことOmniFocus 内で積み残されていたが、今回ようやく実装できたので記事にしました。

 

キーワードは「NSTimeInterval AnimationDuration」

と言っても、オフ会の合間にiPhoneでサンプルを見せてもらっただけ。
ソースコードを見たわけではない。

@toshiya240 さんからお聞きしたキーワードは「NSTimeInterval AnimationDuration」

これをGoogle で検索してみると、それらしき記事が見つかりました。

@dataich さん、ありがとうございます。

画面いっぱいのUITextViewがキーボードに隠れないようにする – cap’n webb

 

こんな感じ

で、上記の@dataich さんの記事を見て書いたのがこんな感じ。
キーボードの表示 ⁄ 非表示の処理をまとめているのが私なりのアレンジ。

- (void)fitKeyboard:(NSNotification*)notification {
    
    // キーボード
    CGRect kbRect = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    kbRect = [[self.view superview] convertRect:kbRect fromView:nil];
    
    // フレームサイズ
    CGRect frm = self.view.frame;
    NSString* nName = notification.name;
    if ( [nName isEqualToString:@"UIKeyboardWillHideNotification"] ) {
        frm.size.height += kbRect.size.height;
    }
    else {
        frm.size.height -= kbRect.size.height;    
    }
    
    // キーボードのアニメーション 
    NSTimeInterval adr = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
    [UIView setAnimationDuration:adr];    
    [self.view setFrame:frm];
    [UIView commitAnimations];
}

これをviewWillAppear 内でUIKeyboardWillShowNotification と UIKeyboardWillHideNotification で呼び出せばOK。 *01【呼び出せばOK】
なんて気楽に言っているが、UIKeyboardDidShowNotification で呼び出してしまっていたりして、うんうん唸っているところと@toshiya240 さんにヒントもらったのは内緒だ!

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    // 通知センターを用意
    NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(fitKeyboard:) name:UIKeyboardWillShowNotification object:nil];
    [nc addObserver:self selector:@selector(fitKeyboard:) name:UIKeyboardWillHideNotification object:nil];
}

 



 

脚注

脚注
01 【呼び出せばOK】
なんて気楽に言っているが、UIKeyboardDidShowNotification で呼び出してしまっていたりして、うんうん唸っているところと@toshiya240 さんにヒントもらったのは内緒だ!

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください