Wie kann ich programmgesteuert den gesamten Text in UITextField auswählen?
ios
swift
uitextfield
uikit
Mirko
quelle
quelle
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, daher wird kein sharedMenuController angezeigt!
Verwenden Sie Folgendes, um das Problem "Funktioniert nur jedes zweite Mal" zu beheben:
__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 bearbeitet von Kommentar hier)
quelle
__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]; });
Ich habe dies gerade getestet, um den obigen Kommentar von Mirko zu überprüfen, aber mein Test bestätigt, dass
selectAll:
tatsächlich der gesamte Text ausgewählt wird, wenn er an das UITextField selbst gesendet wird.Beachten Sie, dass der Text mit CUT | sofort verdeckt wird KOPIEREN | PASTE-Aktionen, aber auf Ihre Frage wird genau das angezeigt, wenn ein Benutzer zunächst auf "Alle auswählen" tippt.
Beachten Sie, dass in der zweiten Zeile der Dialog CUT / COPY / PASTE vorübergehend ausgeblendet wird, ohne ihn für die explizite Benutzerauswahl zu deaktivieren
[_myTextField selectAll:self]; [UIMenuController sharedMenuController].menuVisible = NO;
quelle
[UIMenuController sharedMenuController].menuVisible = NO;
damit diese Zeile keine Wirkung hat.setSelectedRange:
stattdessen verwenden.Verwenden Sie, 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)
quelle
selectAll
Anruf tätigenviewDidAppear
. Es funktioniert nicht, wenn es inviewDidLoad
oder platziert wirdviewWillAppear
.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]; }
quelle
Schnell
Wählen Sie den gesamten Text in a
UITextField
:Meine vollständige Antwort finden Sie hier: https://stackoverflow.com/a/34922332/3681880
quelle
[textField selectAll:nil]
, wäre es gut, dies auch aufzulisten.Um Text auswählen zu können, muss das Textfeld bearbeitet werden können. Um zu wissen, wann das Textfeld bearbeitet werden kann, verwenden Sie die Delegatmethoden:
- (void)textFieldDidBeginEditing:(UITextField *)textField - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
Ich denke 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; }
Wenn Sie nil an selectAll übergeben, wird das Menü nicht angezeigt.
quelle
Leider glaube ich nicht, dass du das kannst.
Ich bin nicht sicher, ob dies Ihnen hilft, aber
setClearsOnBeginEditing
Sie können festlegen, dass derUITextField
vorhandene Wert gelöscht werden soll, wenn der Benutzer mit der Bearbeitung beginnt (dies ist die Standardeinstellung für sicherUITextFields
).quelle
Swift 3:
textField.selectAll(self)
quelle
Ich erstelle eine benutzerdefinierte Warnansicht, die ein
UITextField
Inneres enthält . Ich habe ein Problem mit dem Textfeld festgestellt: Es hatbeginningOfDocument
nur Wert, wenn das Textfeld zum Bildschirm hinzugefügtbecomeFirstResponder
wird und aufgerufen wird.Andernfalls wird
beginningOfDocument
zurückgegebennil
und[UITextField textRangeFromPosition:]
der Wert kann nicht abgerufen werden.Hier ist 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!!!
quelle
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)];
Erledigt!
quelle
Wenn Sie meinen, wie würden Sie dem Benutzer erlauben, den Text in einem uitext-Feld zu bearbeiten, dann weisen Sie ihm einfach firstResponder zu:
Wenn Sie meinen, wie erhalten Sie den Text in das uitext-Feld, dann wird dies es tun:
Wenn Sie meinen, dass Sie den Text tatsächlich auswählen (wie in Hervorheben), kann dies nützlich sein:
Wählen Sie Alle
quelle