2010-04-14 15 views
5

Ich möchte Text auf UITextView auswählen, ähnlich wie die standardmäßigen Popup-Optionen "Auswählen" und "Alle auswählen", die wir sehen, wenn wir auf tippen. Ich möchte dem Benutzer die Möglichkeit geben, das von meinem benutzerdefinierten Menü aus zu tun. Ich habe mit SelectedRange gespielt, aber das scheint nicht der Trick zu sein. Irgendwelche Ideen?Kann ich Text in UITextView programmgesteuert auswählen?

Dank

+0

Können Sie den Code, wo Sie versucht haben,' selectedRange' zu ​​verwenden? Das klingt nach dem richtigen Ansatz. Es ist möglich, dass Sie ihm einen ungültigen Bereich oder etwas geben. –

+0

Ich habe das gleiche Problem. Ich bin in der Lage, den richtigen Bereich für den Text zu erhalten, den ich auswählen möchte (der UITextView scrollt an die richtige Position), aber es gibt keine "Hervorhebung" des Textes im Bereich noch einen Einfügepunkt. Ich frage mich, ob ich eine Nachricht an die UITextView zu "aktivieren" oder etwas zuerst senden müssen? – jasongullickson

Antwort

5

Die selectedRange Eigenschaft sollte es tun, aber, wie in den documentation erwähnt, nur in iPhone OS 3.0 und höher. In 2.2 und früher ist die selectedRange-Eigenschaft tatsächlich ein Einfügepunkt.

+1

Beachten Sie, dass die Funktion zum Erstellen eines 'NSRange's' NSMakeRange() 'ist und nicht' NSRangeMake() ', wie Sie vielleicht erwarten. – devios1

4

Wie in der akzeptierte Antwort erwähnt, ist die selectedRange Eigenschaft ist das, was Sie brauchen, aber passen Sie auf, wenn Sie die -textViewDidBeginEditing: Delegatmethode verwenden Sie können eine Laufschleife verschieben müssen den Benutzer erzeugt „, um zu gewinnen aus Einführabschnittes "Aktion:

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    // Look for the default message and highlight it if present 
    NSRange defaultMsgRange = [textView.text rangeOfString:NSLocalizedString(@"TEXTFIELD_DEFAULT_MESSAGE", nil) options:NSAnchoredSearch]; 

    BOOL isDefaultMsg = !(defaultMsgRange.location == NSNotFound && defaultMsgRange.length == 0); 
    if (isDefaultMsg) { 

     // Need to delay this by one run loop otherwise the insertion wins 
     [self performBlock:^(id sender) { // (BlocksKit - use GCD otherwise) 

      textView.selectedRange = defaultMsgRange; 

     } afterDelay:0.0]; 
    } 
} 
Verwandte Themen