web-dev-qa-db-ja.com

selectedTextRange UITextRangeをNSRangeに変換します

UITextRangeオブジェクトをNSRangeに変換するにはどうすればよいですか?私はたくさんのSO反対方向への投稿についての投稿を見てきましたが、それは私が必要とするものの反対です。私はUITextRangeselectedTextRangeを使用していますUITextViewのプロパティ。これはUITextRangeを返しますが、範囲が必要です。

24
Milo

あなたはこのようなものが必要です:

- (NSRange) selectedRangeInTextView:(UITextView*)textView
{
    UITextPosition* beginning = textView.beginningOfDocument;

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

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

    return NSMakeRange(location, length);
}
50
Vitaly S.

Vitaly Sの回答に基づくSwift拡張機能です。

extension UITextInput {
    var selectedRange: NSRange? {
        guard let range = self.selectedTextRange else { return nil }
        let location = offsetFromPosition(beginningOfDocument, toPosition: range.start)
        let length = offsetFromPosition(range.start, toPosition: range.end)
        return NSRange(location: location, length: length)
    }
}

スウィフト4

extension UITextInput {
    var selectedRange: NSRange? {
        guard let range = selectedTextRange else { return nil }
        let location = offset(from: beginningOfDocument, to: range.start)
        let length = offset(from: range.start, to: range.end)
        return NSRange(location: location, length: length)
    }
}
13
Daniel Wood

UITextViewにはプロパティがあります

@property(nonatomic) NSRange selectedRange;
8
yasirmturk