Frage

Wie kann ich programmgesteuert den gesamten Text in uitextfield auswählen?

War es hilfreich?

Lösung

Es stellt sich heraus, dass anrufen, Selectall: Mit einem Nicht -Nil -Absender wird das Menü angezeigt. Wenn Sie es mit NIL aufrufen, wird es den Text ausgewählt, aber das Menü nicht angezeigt.

Ich habe es versucht, nachdem mein Fehlerbericht darüber von Apple zurückgekommen war, mit dem Vorschlag, dass ich NIL anstelle von selbst bestehe.

Sie müssen nicht mit Uimenucontroller oder anderen APIs ausgewählt werden.

Andere Tipps

Das war der Trick für mich:

[self.titleField setSelectedTextRange:[self.titleField textRangeFromPosition:self.titleField.beginningOfDocument toPosition:self.titleField.endOfDocument]];

Ziemlich hässlich, aber es funktioniert, also wird kein SharedMenucontroller gezeigt!

Um das Problem "nur jedes zweite Mal zu funktionieren" verwenden, verwenden Sie die folgende:

    __weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
    __strong __typeof(weakSelf) strongSelf = weakSelf;
    UITextRange *range = [strongSelf textRangeFromPosition:strongSelf.beginningOfDocument toPosition:strongSelf.endOfDocument];
    [strongSelf setSelectedTextRange:range];
});

Vielen Dank an Eric Baker (gerade aus dem Kommentar hier bearbeitet)

Ich habe dies gerade getestet, um Mirkos Kommentar oben zu überprüfen, aber mein Test überprüft das selectAll: Wählt tatsächlich den gesamten Text aus, wenn er an das Uitextfield selbst gesendet wird.

Beachten Sie, dass der Text sofort mit Cut | verdeckt wird Kopie | Einfügen Aktionen ein, aber zu Ihrer Frage wird genau das erscheint, wenn ein Benutzer zunächst "Alle" wählt.

Die Lösung, mit der ich gehe, beachten

[_myTextField selectAll:self];
[UIMenuController sharedMenuController].menuVisible = NO;

Verwenden Sie das, was Sie brauchen

Objc

 [yourtextField becomeFirstResponder]; //puts cursor on text field

 [yourtextField selectAll:nil];  //highlights text

 [yourtextField selectAll:self]; //highlights text and shows menu(cut copy paste)

Schnell

yourTextField.becomeFirstResponder() //puts cursor on text field

yourTextField.selectAll(nil)  //highlights text

yourTextField.selectAll(self) //highlights text and shows menu(cut copy paste)

Schnell

Wählen Sie alle Text in a UITextField:

textField.selectedTextRange = textField.textRangeFromPosition(textField.beginningOfDocument, toPosition: textField.endOfDocument)

Meine volle Antwort lautet hier.

Dies ist die beste Lösung, die ich gefunden habe. Kein SharedMenucontroller, und es funktioniert nacheinander:

    -(void)textFieldDidBeginEditing:(UITextField *)textField
{
    [textField performSelector:@selector(selectAll:) withObject:nil afterDelay:0.1];
}

Um Text auszuwählen, muss das Textfeld bearbeitet werden. Um zu wissen, wann das Textfeld bearbeitet wird, verwenden Sie die Delegiertenmethoden:

- (void)textFieldDidBeginEditing:(UITextField *)textField
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

Ich glaube nicht, dass textfieldshouldBegInediting: erforderlich ist, aber es ist das, was ich in meiner Implementierung verwendet habe.

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    [textField selectAll:textField];
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    return YES;
}

In NIL ausgeben, um es zu wählen: Zeigen Sie das Menü nicht an.

Leider glaube ich nicht, dass Sie das können.

Ich bin mir nicht sicher, ob das dir hilft, aber setClearsOnBeginEditing Ermöglicht Ihnen das an, dass die UITextField Sollte den vorhandenen Wert löschen, wenn der Benutzer mit der Bearbeitung beginnt (dies ist die Standardeinstellung für sichern UITextFields).

Swift 3:

textField.selectAll(self)

Ich erstelle eine benutzerdefinierte Alarmansicht, die a enthält UITextField Innerhalb. Ich fand ein Problem im Textfeld: das ist: beginningOfDocument hat nur einen Wert, wenn Textfield zu Bildschirm hinzugefügt wird & becomeFirstResponder wird genannt.

Andernfalls beginningOfDocument kehrt zurück nil und [UITextField textRangeFromPosition:] kann den Wert nicht bekommen.

Hier ist also mein Beispielcode, um diesen Fall zu lösen.

UIWindow *window = [[[UIApplication sharedApplication] windows] firstObject];
[window addSubview:theAlertView]; // textfield must be added as a subview of screen first
UITextField *textField = theAlertView.textField;
[textField becomeFirstResponder]; // then call to show keyboard and cursor 
UITextRange *range = [textField textRangeFromPosition:textField.beginningOfDocument toPosition:textField.endOfDocument]; // at this time, we could get beginningOfDocument
[textField setSelectedTextRange:range]; // Finally, it works!!!
UITextField *tf = yourTF;
// hide cursor (you have store default color!!!)
[[tf valueForKey:@"textInputTraits"] setValue:[UIColor clearColor]
                                       forKey:@"insertionPointColor"];
// enable selection
[tf selectAll:self];
// insert your string here
// and select nothing (!!!)
[tf setMarkedText:@"Egor"
    selectedRange:NSMakeRange(0, 0)];

Fertig!

Wenn Sie meinen, wie würden Sie dem Benutzer erlauben, den Text in einem Uitextfield zu bearbeiten, dann zuweisen Sie ihm einfach Firstresponder:

[textField becomeFirstResponder]

Wenn Sie meinen, wie erhalten Sie den Text im Uitextfield, das wird dies tun:

textField.text

Wenn Sie meinen, wählen Sie tatsächlich den Text aus (wie in hervorgehobenem Highlight). Dies wird möglicherweise nützlich sein:

Wählen Sie Alle

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top