2013-03-26 13 views
11

Sto cercando di ottenere l'intervallo di testo selezionato da UITextView (eo UITextField) in modo che possa modificare il testo selezionato o modificare una stringa attribuita. Il metodo seguente viene attivato quando eseguo una selezione, ma il codice nel metodo restituisce valori nulli.Come ottenere un intervallo di testo selezionato da UITextView o UITextField

- (void)textViewDidChangeSelection:(UITextView *)textView { 

    UITextRange *selectedRange = [textField selectedTextRange]; 

    NSLog(@"Start: %@ <> End: %@", selectedRange.start, selectedRange.end); 

} 

risposta

13

Si può provare questo,

- (void)textViewDidChangeSelection:(UITextView *)textView { 

    UITextRange *selectedRange = [textView selectedTextRange]; 
    NSString *selectedText = [textView textInRange:selectedRange]; 
} 
2

Swift

prima ottenere l'intervallo di testo selezionato, e quindi utilizzare tale intervallo per ottenere il testo attuale:

if let textRange = myTextView.selectedTextRange { 

    let selectedText = myTextView.text(in: textRange) 

    // ... 
} 

Note:

  • La selezione del testo da un UITextField viene eseguita allo stesso modo.
  • L'intervallo è un UITextRange, non uno NSRange. Ciò consente una corretta selezione di cose come emoji e cluster grapheme estesi. Vedi this answer per dettagli correlati su questo.