将selectedTextRange UITextRange转换为NSRange
我怎样才能将UITextRange
对象转换为NSRange
? 我已经看到很多关于走向另一个方向的SOpost,但这是我所需要的相反。 我使用的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) } }
UITextView
有一个属性
@property(nonatomic) NSRange selectedRange;