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;