2017-02-16 2 views
1

Ich habe die folgenden Methoden:Wie kann ich in Swift 3 die Methode prepare aufrufen, nachdem die Benutzereingabe vier Zeichen hat?

@IBAction func postcodeTextfieldDidChanged(_ sender: UITextField) { 

     if (postcodeTextField.text?.characters.count == 4) { 
      self.postcode = postcodeTextField.text 
      postcodeHas4Chars = true 
     } else { 
      postcodeHas4Chars = false 
     } 
    } 

Und die Vorbereitung-Methode:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if segue.identifier == "CoffeeShopListWithPostcode" { 
      if (postcodeHas4Chars == true) { 
       if let list = segue.destination as? CoffeeShopListVC { 
        list.postcode = postcode 
       } else { 
        print("Data NOT Passed!") 
       } 
      } 
     } else { print("Id doesnt match with Storyboard segue Id") 
     } 
    } 

Der Code funktioniert, und ich kann die Postleitzahl zum nächsten Viewcontroller senden, aber wie kann ich den Code ändern zu Rufen Sie die Methode automatisch nach der vierten Eingabe auf? Im Moment muss der Benutzer die Eingabe manuell beenden, damit sie ausgeführt werden kann.

+0

Sie möchten also, dass das Segment automatisch ausgeführt wird, wenn der Benutzer das vierte Zeichen eingibt? – Sweeper

+0

Ja das ist richtig. Nach Eingabe des letzten Zeichens Die App sollte den Inhalt automatisch zur nächsten Ansicht senden. Im Moment muss er die Tastatureingabe vorher verlassen. – Severin

Antwort

4

Jedes Mal, wenn sich der Text des Textfelds ändert, prüfen Sie, ob der Text 4 Zeichen lang ist. Wenn dies der Fall ist, rufen Sie performSegue(withIdentifier, sender:). Ganz einfach:

@IBAction func postcodeTextfieldDidChanged(_ sender: UITextField) { 

    if (postcodeTextField.text?.characters.count == 4) { 
     self.postcode = postcodeTextField.text 
     postcodeHas4Chars = true 
     performSegue(withIdentifier: "CoffeeShopListWithPostcode", sender: self) 
    } else { 
     postcodeHas4Chars = false 
    } 
} 

Denken Sie auch daran, dass Sie anstelle des valueChanged event zum editingChanged Ereignis verbinden.

+0

Danke, aber diese Methode sendet die Postleitzahl (Textinput) nicht zur nächsten Ansicht. – Severin

+0

@Severin alles, was Sie tun müssen, ist die 'performSegue' Zeile hinzuzufügen. Hast du etwas gelöscht? – Sweeper

+0

Ah ich habe einen Fehler gemacht, der Bildschirm wurde immer zweimal ausgeführt. Danke Kehrer. Nebenbei habe ich eine andere Lösung gefunden, die funktioniert. Nach self.postcode = postcodeTextField.text führe ich postcodeTextField.endEditing (true) aus und schließe die Tastatur, was bedeutet, dass das Seque ausgeführt wird. – Severin

Verwandte Themen