2017-12-31 17 views
0

Meine Speichern Schaltfläche ist mit der Funktion saveBtnHidden() im folgenden Code ausgeblendet. Die Schaltfläche Speichern wird jedoch nicht mehr angezeigt, wenn Text in das Textfeld eingegeben wird. Ich habe mehrere ähnliche Lösungen ausprobiert. Jedes Mal, wenn ich in das Textfeld tippe, wird der Speicherknopf nicht angezeigt.Textfeld nicht leer Schaltfläche Speichern in Swift

import UIKit 

class TableViewController: UITableViewController, UITextFieldDelegate { 

    @IBOutlet weak var saveBtn: UIButton! 
    @IBOutlet var nicknameField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     saveBtnHidden()  
    } 

    func saveBtnHidden() { 
     if (nicknameField.text?.isEmpty ?? true) { 
      // is empty 
      saveBtn.isHidden = true 
     } else { 
      saveBtn.isHidden = false 
     } 
    } 

    @IBAction func saveBtnPressed(_ sender: Any) { 
     performSegue(withIdentifier: "nextPage", sender: nil) 
    } 
} 

Antwort

1

Sie erhalten diese Fehlermeldung, weil Ihre Funktion saveBtnHidden() nur einmal in viewDidLoad() genannt wird. Es wird nicht erneut aufgerufen, wenn sich der Text in Ihrem Textfeld ändert. Zu erkennen, wenn Textänderungen, müssen Sie ein Ziel zu Ihrem Textfeld hinzuzufügen, die eine Funktion aufruft, wenn sie sich ändert (.editingChanged) wie folgt aus:

nicknameField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) 

Dann in der textFieldDidChange rufen Sie Ihre saveBtnHidden() Funktion:

func textFieldDidChange(_ textField: UITextField) { 
    saveBtnHidden() 
} 

-Code angepasst von: How do I check when a UITextField changes?

+0

das war es! Ich muss mehr über die textfielddidchange lernen. Wenn ich mehrere Textfelder hinzufügen würde, würde ich diesen Prozess für jedes Feld einfach wiederholen oder gibt es eine Möglichkeit, die Kombination aus allen zusammenzufassen? –

+0

Für mehrere Textfelder können Sie dasselbe Ziel wie in meinem Beispiel allen Textfeldern hinzufügen. Dann können Sie in der Funktion textFieldDidChange überprüfen, welches Textfeld mit 'if textField == nicknameField {do something} geändert wurde. –

+0

@LeoDabus Ich konnte das nicht für die Textfelder verwenden. Ich muss es in der falschen Gegend betreten haben. –

0

Verwenden delegate jede Änderung mitteilen zu. Delegierte sind ein wichtiger Bestandteil der iOS-Entwicklung und des Apple-Frameworks.

class TableViewController: UITableViewController, UITextFieldDelegate { 

    @IBOutlet weak var saveBtn: UIButton! 
    @IBOutlet var nicknameField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     saveBtnHidden()  

     nicknameField.delegate = self 
    } 


    func textFieldDidChange(_ textField: UITextField) { 
     saveBtnHidden() 
    } 
// More of your source code below... 
Verwandte Themen