2014-01-15 4 views
18

Wie kann ich ein UITextRange Objekt in ein NSRange konvertieren? Ich habe viele SO-Posts über die andere Richtung gesehen, aber das ist das Gegenteil von dem, was ich brauche. Ich verwende die UITextRangeselectedTextRange, die eine Eigenschaft von UITextView ist. Es gibt eine UITextRange zurück, aber ich brauche eine Reichweite.Konvertieren selectedTextRange UITextRange in NSRange

Antwort

41

Sie brauchen etwas wie folgt aus:

- (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); 
} 
4

UITextView eine Eigenschaft hat

@property(nonatomic) NSRange selectedRange; 
+5

Dies gilt nicht Beantworten Sie die Frage des OP. Es gibt berechtigte Gründe, warum Sie von 'UITextRange' in' NSRange' konvertieren müssen. – Stunner

+0

Auch existiert es nicht in swift – Daniel

+1

Arbeit für mich.THX – Jerome

5

Hier ist eine Swift-Erweiterung auf die Antwort anhand von 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) 
    } 
} 
Verwandte Themen