2017-06-27 4 views
2

Ich versuche, ein UITextField-Objekt in einen String zu konvertieren, so dass ich es an eine Funktion in meiner Modelldatei übergeben kann. Es wird jedoch ein Leerzeichen gedruckt, auch wenn ich einige Zeichen in das Eingabefeld für den Namen eingegeben habe und dann außerhalb davon klicke. Warum ist dort nichts gespeichert?Konvertieren von UITextField in String in Swift

In-View-Controller-Datei:

@IBOutlet weak var nameInputText: UITextField! 

    override func viewDidLoad() { 


    super.viewDidLoad() 
    nameInputText.delegate = self 
    let text: String = nameInputText.text! 
    print(text) //this prints a blank 
    model.validateName(nametext: text) 

} 
+0

Sie haben diesen Code innerhalb Ihrer 'viewDidLoad' also sind Sie sicher, dass Sie einen beliebigen Text in Ihrem' nameInputText' haben? –

+0

Dieser Code passiert, wenn der Controller geladen wird. Hast du zuerst Text in das Textfeld geschrieben? – kailoon

+0

Wo soll ich das setzen, damit der Text in Variable geladen wird? Ja, ich habe einige Zeichen in das Textfeld eingegeben. – jean

Antwort

0

Es sollte wie sein unter

@IBOutlet weak var usernameInputText : UITextField! 

     override func viewDidLoad() { 

     super.viewDidLoad() 
     usernameInputText.delegate = self 
    } 

    func ClickOnButton() 
    { 
     let text: String = usernameInputText.text! 
     print(text) //this prints My text 
     model.validateName(nametext: text) 
    } 

func textField(_ textField: UITextField, 
        shouldChangeCharactersIn range: NSRange, 
        replacementString string: String) 
     -> Bool 
    { 
     let text: String = usernameInputText.text! 
     print(text) //this prints My text 
     model.validateName(nametext: text) 
    } 
+0

Wie macht es Sinn, den Text eines 'UITextField' programmatisch zu setzen und dann, ohne seinen Text von der UI zu ändern, diesen Text an eine andere Funktion zu senden, anstatt die Zeichenkette selbst zu senden? –

+0

Der Versuch, den Text zu erhalten, den der Benutzer eingibt. – jean

+0

Ich habe Antwort bearbeitet ... Entweder können Sie Methode auf jede Texteingabe aufrufen oder Sie können Schaltfläche anzeigen und auf klicken Sie auf diese Schaltfläche Aufruf Methode –

0

viewDidLoadaufgerufen wird, bevor Ihre ViewController für den Benutzer sichtbar sein würde, so dass jedes Textfeld kann nur enthalten Text, wenn Sie diesen Text vorher festgelegt haben (in InterfaceBuilder oder Code). Wenn Sie von diesem Textfeld aus auf Benutzereingaben zugreifen möchten, sollten Sie dies entweder in textFieldDidEndEditing tun oder in einer anderen Funktion, von der Sie wissen, dass sie erst nach der Benutzerinteraktion aufgerufen werden kann.

+0

Sollte ich hinzufügen, lassen Sie Text: String = usernameInputText.text! funktioniert die Funktion TextFieldDidEndEditing? – jean

+0

Ich habe versucht, diese Erweiterungsfunktion bei es kompiliert nicht. Außer Reichweite. – jean

+0

Der Compiler hat wahrscheinlich ein Problem mit Ihrer Funktion 'model.validateName', wo haben Sie sie definiert? Verwenden Sie force nicht zum Auspacken des textField-Textes, aber wenn Sie den Text zur späteren Verwendung speichern müssen und nicht nur zum Aufrufen der Validierungsfunktion, dann speichern Sie ihn in einer Variablen. –

Verwandte Themen