2012-03-19 13 views
15

テキストフィールドのUITextRangeオブジェクトを使ってUITextFieldの現在のキャレット位置を取得する方法はありますか?任意の用途であってもUITextFieldによってUITextRangeが返されますか? UITextPositionのパブリックインターフェイスには、可視のメンバーはありません。UITextFieldのUITextPosition

答えて

20

私は昨夜同じ問題に直面していました。 UITextFieldでoffsetFromPositionを使用して、選択した範囲の「開始」の相対位置を取得して位置を計算する必要があることが判明しました。

// Get the selected text range 
UITextRange *selectedRange = [self selectedTextRange]; 

//Calculate the existing position, relative to the beginning of the field 
int pos = [self offsetFromPosition:self.beginningOfDocument 
         toPosition:selectedRange.start]; 

テキストフィールドを変更した後、ユーザーの位置を復元するために簡単だったように私はendOfDocumentを使用して終了。私はUITextFieldの上のカテゴリを使用して(ちょうどuitextviewクラスに実装された方法のように)setSelectedRangeとselectedRangeを実装

http://neofight.wordpress.com/2012/04/01/finding-the-cursor-position-in-a-uitextfield/

+1

あなたのリンクが疑わしいマルウェアサイトを指しています。それを確認してください –

12

:私はここにいることに掲示ブログを書きました。 B2Cloud hereの例を以下に示します。

@interface UITextField (Selection) 
- (NSRange) selectedRange; 
- (void) setSelectedRange:(NSRange) range; 
@end 

@implementation UITextField (Selection) 
- (NSRange) selectedRange 
{ 
    UITextPosition* beginning = self.beginningOfDocument; 

    UITextRange* selectedRange = self.selectedTextRange; 
    UITextPosition* selectionStart = selectedRange.start; 
    UITextPosition* selectionEnd = selectedRange.end; 

    const NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart]; 
    const NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd]; 

    return NSMakeRange(location, length); 
} 

- (void) setSelectedRange:(NSRange) range 
{ 
    UITextPosition* beginning = self.beginningOfDocument; 

    UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location]; 
    UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length]; 
    UITextRange* selectionRange = [self textRangeFromPosition:startPosition toPosition:endPosition]; 

    [self setSelectedTextRange:selectionRange]; 
    } 

@end 
+0

ありがとうございます。あなたのコードは、 'UITextPosition'を' UITextView'でどのように使うことができるかを理解する助けとなりました。 – derpoliuk