Posted at

UITextViewでカーソルを右端に持ってくる方法

More than 5 years have passed since last update.

UITextViewにはselectedRangeというプロパティがあり、NSRange型で選択範囲を指定できます。NSRangeのメンバー変数にはlengthとpositionがあって、そのlengthを0にするとpositionによってカーソルの位置を指定することができます。しかし、長文が見た目上で改行されている場合、その行の右端にカーソルを持ってこようとしてposition指定しても、次の行の先頭にカーソルが来てしまいます。これを回避してカーソルを右端に表示する方法を発見しましたので開示します。

以下ではtextViewにUITextViewのインスタンスが格納されているとします。


Objective-C

UITextRange *cur = textView.selectedTextRange;

CGRect endRect = [textView caretRectForPosition:cur.end];
UITextPosition *pos = [textView closestPositionToPoint:CGPointMake(100000, endRect.origin.y + endRect.size.height / 2)];
textView.selectedTextRange = [textView textRangeFromPosition:pos toPosition:pos];