2017-11-09 3 views
0

Ich habe eine Ansicht, die Beschriftungen enthält und über eine Schaltfläche verfügt, um die Werte der Beschriftungen zu ändern. Anstatt die Werte einzeln in der Schaltfläche zu ändern, wie kann ich die gesamte Ansicht neu laden, um die Beschriftungen zu aktualisieren.So laden Sie die Ansicht nach Datenänderungen in Swift neu

@IBOutlet weak var one: UILabel! 
    @IBOutlet weak var two: UILabel! 
    @IBOutlet weak var three: UILabel! 
.... 
    @IBOutlet weak var updateLabels: UIButton!{ 
     //doing something to change the value of the labels 
     //then wanna reload the whole view 
     viewDidLoad() 
    } 

Ich hatte die ViewDidLoad() -Methode aufgerufen, hat aber nicht funktioniert.

Antwort

1

Sie sollten niemals viewDidLoad selbst anrufen. Es ist eine Framework-Funktion, die das Betriebssystem aufruft, um anzuzeigen, dass Ihre Ansichten für die Einrichtung bereit sind.

Es wäre besser dienen, wenn Sie Ihre Funktion

func updateLabels() { 
     one.text = "one" 
     two.text = "two" 
     three.text = "three" 
} 

getrennt und jetzt können Sie die updateLabels Funktion aufrufen, wenn Sie wollen.

0

Warum setzen Sie nicht alle Etiketten auf eine Methode. und feuern Sie es ab, wann immer Sie neu laden müssen.

override func viewDidLoad() { 
    super.viewDidLoad() 

    updateLabels() 

} 

func updateLabels() { 
    one.text = "one" 
    two.text = "two" 
    three.text = "three" 
} 


@IBAction func updateLabels(_ sender: Any) { 
     updateLabels() 
} 
+0

@ShauketSheikh was meinst du mit schlechten Ansatz? Wenn Sie Anfangsdaten haben, aktualisieren Sie diese in der Methode viewDidLoad. Wenn neue aktualisierte Werte vorhanden sind, wird dieselbe Methode für jede Aktionsmethode ausgelöst, um diese zu aktualisieren. –

-1

Ihre Methode zur Aktualisierung Ihrer Etiketten ist falsch. Was Sie tun müssen, ist wie folgt:

Ihre Etiketten erklären, wie Sie haben sicherzustellen, dass sie im Interface Builder verknüpft sind:

//Declare The Labels 
@IBOutlet var one: UILabel! 
@IBOutlet var two: UILabel! 
@IBOutlet var three: UILabel! 

Dann erstellen Sie eine IBAction Funktion, die von einem UIButton ausgelöst wird:

/// Set The Text Labels Text 
@IBAction func updateLabelText(){ 

    //Set Label Text 
    one.text = "one" 
    two.text = "two" 
    three.text = "three" 
} 

Natürlich denken Sie daran, dies mit der UIButton-Instanz in Interface Builder zu verknüpfen.

Hoffe, das hilft.

+1

Der Benutzer hat gesagt, dass er versucht hat, diese Änderung von einem UIButton auszulösen, was bedeutet, dass eine IBAction ein guter (aber nicht der einzige) Weg wäre, dies zu handhaben. –

Verwandte Themen