将selectedTextRange UITextRange转换为NSRange

Mil*_*ilo 24 objective-c ios nsrange uitextrange

如何将UITextRange对象转换为NSRange?我已经看到很多关于走向另一个方向的SO帖子,但这与我需要的相反.我正在使用的UITextRange selectedTextRange是一个属性UITextView.它返回一个,UITextRange但我需要一个范围.

Vit*_* S. 50

你需要这样的东西:

- (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);
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ood 13

这是基于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)
    }
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特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)
    }
}
Run Code Online (Sandbox Code Playgroud)


yas*_*urk 8

UITextView 有房产

@property(nonatomic) NSRange selectedRange;
Run Code Online (Sandbox Code Playgroud)

  • 这不符合OP的问题.您需要将`UITextRange`转换为`NSRange`才有正当理由. (6认同)