ios objective-c nsrange uitextrange

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;