【发布时间】:2014-02-04 15:37:00
【问题描述】:
如何将UITextRange 对象转换为NSRange?我已经看到很多关于走向另一个方向的帖子,但这与我所需要的相反。我正在使用UITextRange selectedTextRange 这是UITextView 的属性。它返回一个UITextRange,但我需要一个范围。
【问题讨论】:
标签: ios objective-c nsrange uitextrange
如何将UITextRange 对象转换为NSRange?我已经看到很多关于走向另一个方向的帖子,但这与我所需要的相反。我正在使用UITextRange selectedTextRange 这是UITextView 的属性。它返回一个UITextRange,但我需要一个范围。
【问题讨论】:
标签: ios objective-c nsrange 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);
}
【讨论】:
UITextView 有一个属性
@property(nonatomic) NSRange selectedRange;
【讨论】:
UITextRange 转换为 NSRange 的正当理由。
selectedTextRange,所以需要转换成简单的NSRange
这是基于 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)
}
}
【讨论】:
斯威夫特 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
}
}
}
【讨论】: