UITextView のカーソル位置へスクロールしてくれないバグ対応

この記事では UITextView で文字入力中に最後の行で改行すると、カーソル位置が隠れる問題の解決方法を紹介する。

この問題が起こる原因

この問題は iOS7 特有のバグだそう。

なので、Apple のバグ修正アップデートを待つのも1つの手かもしれない。

以下には、UITextView のサブクラスを作って解決する方法を紹介する。

UITextView の最後の行で改行した時にカーソルが隠れないようにする方法

UITextView のサブクラスを作って、 scrollRangeToVisible をオーバーライドすることで解決できる。

scrollRangeToVisible のオーバーライド

- (void)scrollRangeToVisible:(NSRange)range
{
    [super scrollRangeToVisible:range];
     
    if(isIOS7/* iOS7 の場合の判別式 */){
        if ( (self.layoutManager.extraLineFragmentTextContainer != nil) && (self.selectedRange.location == range.location) )
        {
            CGRect caretRect = [self caretRectForPosition:self.selectedTextRange.start];
            [self scrollRectToVisible:caretRect animated:YES];
        }
    }
}

以上。

関連記事

Objective-C でデザインパターンを学ぶのに欠かせないサイト
EXC_BAD_ACCESS エラーの意味と解決方法
Xcode4.5 で IB(Interface Builder) を使用しない「Hello World」プロジェクトの作成方法

コメントを残す

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

This blog is kept spam free by WP-SpamFree.

コメントフィード

トラックバックURL: http://monopocket.jp/blog/objective-c/3282/trackback/