ViewController Refresh bei Auswahl von TabBarController

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ViewController Refresh bei Auswahl von TabBarController

    Ich bräuchte mal kurz eure Hilfe. Ich habe in meiner APP 4 ViewController. Im ersten Viewcontroller (welcher per Storyboard mit dem TabBarController verbunden ist), habe ich folgenden Code eingefügt:


    Quellcode

    1. // Refresh nach TabBarAuswahl
    2. func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    3. // prüfen ob userDefaults vorhanden ist
    4. let userdefaults = UserDefaults.standard
    5. if userdefaults.string(forKey: "SavedName") != nil{
    6. print("userDefaults ist vorhanden")
    7. self.load()
    8. self.Auswahl()
    9. self.Felder()
    10. } else {
    11. print("Keine Einträge in userDefaults")
    12. // Laden der Funktion mit den Inhalten der Nachricht
    13. self.Auswahl()
    14. self.Felder()
    15. }
    16. }
    17. override func viewWillAppear(_ animated: Bool) {
    18. super.viewWillAppear(animated)
    19. self.tabBarController?.delegate = self
    20. }
    Alles anzeigen
    Ich möchte beabsichtigen, das nach Auswahl einer View per TabBarController, der ausgewählte ViewController den Code welcher in der Funktion tabBarController ist jedesmal neu geladen wird wenn die View ausgewählt wird. Das Funktioniert zwar, aber erst beim zweiten klick auf das TabBar Icon.

    Schönes Wochenende,
    Gruß Nicolai
  • Der Code soll ausgeführt werden, wenn ein bestimmter ViewController im TabBarController ausgewählt wird, richtig?

    Du könntest dazu die viewWillAppear(_:) oder viewDidAppear(_:) Methoden des ViewControllers verwenden. Diese werden jedes mal getriggert, wenn der ViewController im TabBarController aktiviert wird.
  • Danke MCDan, jetzt hat es geklappt :) ,


    Quellcode

    1. // Refresh nach TabBarAuswahl
    2. override func viewWillAppear(_ animated: Bool) {
    3. // prüfen ob userDefaults vorhanden ist
    4. let userdefaults = UserDefaults.standard
    5. if userdefaults.string(forKey: "SavedName") != nil{
    6. print("userDefaults ist vorhanden")
    7. self.load()
    8. self.Auswahl()
    9. points.text = String(punkte)
    10. } else {
    11. print("Keine Einträge in userDefaults")
    12. // Laden der Funktion mit den Inhalten der Nachricht
    13. self.Auswahl()
    14. }
    15. }
    Alles anzeigen
    Zwei Fragen hätte ich noch. Was müsste anstelle meines Codes in der Funktion wenn ich den kompletten ViewController neu laden möchte ?

    Als zweite Frage würde mich interessieren ob es die gängige Methode ist Werte eines ViewControllers in UserDefaults zu speichern und sie dann in dem nächsten ViewController wieder zu laden. Variablen von einem zum anderen ViewController zu übergeben geht ja nicht oder ? Zumindest kann ich nichts darüber finden.

    Gruß Nicolai
  • NicolaiK schrieb:

    Zwei Fragen hätte ich noch. Was müsste anstelle meines Codes in der Funktion wenn ich den kompletten ViewController neu laden möchte ?
    Da gibt es viele Möglichkeiten.

    1. Du schreibst Dir eine "Reset" Funktion, die den Inhalt und das UI des ViewControllers "zurücksetzt".

    2. Du verwendest einen Container View Controller und lädst den Child View Controller per Code immer wieder neu.

    3. Du könntest mal probieren per tabBarController(_:shouldSelect:) den betroffenen ViewController gegen einen "frischen" zu tauschen.

    4. Wenn der ViewController bei der Anzeige immer "neu" sein soll, solltest Du diesen vielleicht modal und nicht in einem TabBarController anzeigen. ;)