繁体   English   中英

将 selectedTextRange UITextRange 转换为 NSRange

[英]Convert selectedTextRange UITextRange to NSRange

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

你需要这样的东西:

- (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);
}

这是基于 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)
    }
}

UITextView有一个属性

@property(nonatomic) NSRange selectedRange;

斯威夫特 5

extension UITextInput
{
    var selectedRange: NSRange?
    {
        if let selectedRange = self.selectedTextRange
        {
           return NSMakeRange(self.offset(from: self.beginningOfDocument, to: selectedRange.start),
                              self.offset(from: selectedRange.start,      to: selectedRange.end))
        }
        else
        {
            return nil
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM