UIScrollVIewの上に乗っているViewをFirstResponderにすると勝手にスクロールされる問題

UIScrollVIewの上に乗っているViewをFirstResponderにすると勝手にスクロールされる問題こんにちは。
iOS5で遭遇する問題のようです。iOS6では発生しませんでした。
ちょっとマニアックなところかもしれませんが、はまると結構嫌な部分なのでシェアします。

動作上の問題

例えば、UIScrollViewの上にUITableViewを乗せている状態で、UITextViewがFirstResponderの時は入力しやすいように位置を修正しているにもかからわず、コード上でbecomesFirstResponderと指定すると、勝手にUITextViewの最後の文字のところが表示領域最下部になるようにスクロールしてしまう。

原因

UIScrollView上のViewがプログラム上でfirstResponderになった場合、UIScrollViewの、scrollRectToVisible: animated:が呼ばれて自動でスクロールしてしまう。

解決方法

該当のUIScrollViewを継承してscrollRectToVisible: animated:をオーバーライドして空にする(とりあえずFirstResponderになった時にこのメソッドが反応しないようにします。あとはご自由に)。

// 動作を無視するためにオーバーライド
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
{
    /* 空にする */
}

UIScrollViewのサブクラスの中身はこれだけです。いやぁ、解決してよかった!

参考

Pocket
LINEで送る

You may also like...