본문 바로가기

iOS Programming

UITextField / UITextView 입력 커서 이동

UITextField와 UITextView에서의 입력 커서를 제어하려면

UITextInput 프로토콜 메서드를 이용해야 합니다.

현재 커서의 위치 정보는 NSRange의 정수값이 아닌 NSObject에서 계승받은 UITextPosition으로 관리됩니다.

이유는 UITextPosition API 문서에 잘 나와 있습니다.


Some documents contain nested elements (for example, HTML tags and embedded objects) and you need to track both absolute position and position in the visible text.

The WebKit framework, which the iPhone text system is based on, requires that text indexes and offsets be represented by objects.


그러나 아래의 코드를 이용해 현재 커서 위치를 NSRange 구조체 정수값으로 알아내거나 특정위치로 커서를 이동할 수 있습니다.



// 현재 입력 커서 위치를 알아낸다.

- (NSRange)currentSelectedTextRange

{

UITextRange *range = textField.selectedTextRange;

UITextPosition *beginning = textField.beginningOfDocument;

NSInteger location = [textField offsetFromPosition:beginning toPosition:range.start];

NSInteger length = [textField offsetFromPosition:range.start toPosition:range.end];

return NSMakeRange(location, length);

}


// 특정 위치로 입력 커서 이동

- (void)selectTextRange:(NSRange)range

{

UITextPosition *start = [textField positionFromPosition: textField.beginningOfDocument offset:range.location];

UITextPosition *end = [textField positionFromPosition: start offset:range.length];

UITextRange *newRange = [textField textRangeFromPosition:start toPosition:end];

[textField setSelectedTextRange:newRange];

}