ios - Convertir seleccionadoTextRange UITextRange a NSRange
objective-c (3)
Aquí hay una extensión Swift basada en la respuesta de Vitaly S.
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)
}
}
Swift 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)
}
}
¿Cómo puedo convertir un objeto UITextRange
en un NSRange
? He visto un montón de publicaciones de SO sobre ir en la otra dirección, pero eso es lo contrario de lo que necesito. Estoy utilizando el UITextRange
selectedTextRange
que es una propiedad de un UITextView
. Devuelve un UITextRange
pero necesito un rango.
Necesitas algo como esto:
- (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
tiene una propiedad
@property(nonatomic) NSRange selectedRange;