wake-up-neo.com

Einen ViewController neu laden

Ich habe einen View-Controller, der einige Informationen anzeigt (keine Tabellensichten).

Ich habe einen Update-Aufruf an einen Remote-Server, der meine Datenbank füllt. Ich möchte meinen ViewController nach dem Update-Aufruf vollständig neu laden.

Was soll ich machen?

37
Tiago Veloso

Sie brauchen wirklich nicht zu tun:

[self.view setNeedsDisplay];

Ehrlich gesagt, denke ich, "wir hoffen auf die beste" Art der Lösung, in diesem Fall . Es gibt verschiedene Ansätze, um Ihre UIViews zu aktualisieren:

  1. KVO
  2. Benachrichtigungen
  3. Delegation

Jeder hat Vor- und Nachteile. Abhängig davon, was Sie aktualisieren und welche Art von "Verbindung" Sie zwischen Ihrer Business-Schicht (der Serverkonnektivität) und der UIViewController haben, kann ich eine empfehlen, die Ihren Anforderungen entspricht.

17
Rui Peres

wenn Sie wissen, dass Ihre Datenbank aktualisiert wurde, und Sie nur viewcontrolle aktualisieren möchten (was auch mein Fall ist). Ich fand keine andere Lösung, aber was ich tat, ist Als meine Datenbank aktualisiert wurde, rief ich an 

[self viewDidLoad];

wieder und es hat geklappt . Denken Sie daran, wenn Sie andere viewWillAppear oder loadView überschreiben, und rufen Sie sie ebenfalls in derselben Reihenfolge auf.

[self viewDidLoad]; [self viewWillAppear: YES];

aber ich denke, es sollte eine spezifischere Lösung geben, z. B. die Schaltfläche "Aktualisieren" im Browser

24
Moaz Saeed

Wenn Sie einen ViewController, der ursprünglich von einer XIB geladen wurde, erneut laden möchten, können Sie die nächste UIViewController-Erweiterung verwenden:

extension UIViewController {
    func reloadViewFromNib() {
        let parent = view.superview
        view.removeFromSuperview()
        view = nil
        parent?.addSubview(view) // This line causes the view to be reloaded 
    }
}
10
juancazalla

Versuchen Sie Folgendes: Sie müssen beide Methoden aufrufen, um die Ansicht zu aktualisieren

-Ziel c

[self viewDidLoad]; 
[self viewWillAppear:YES];

-Schnell

self.viewDidLoad()
self.viewWillAppear(true)
4
Patel Jigar

Aktualisieren Sie die Daten ... ändern Sie die Schaltflächentitel. Was auch immer Sie aktualisieren müssen ..

dann einfach anrufen 

[self.view setNeedsDisplay];
2
Shubhank

Wechseln Sie erneut zu Ihrem ViewController. In meiner Situation funktionieren [self.view setNeedsDisplay]; und [self viewDidLoad]; [self viewWillAppear:YES]; nicht, aber die unten beschriebene Methode hat funktioniert.

In Ziel C

UIStoryboard *MyStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil ];
UIViewController *vc = [MyStoryboard instantiateViewControllerWithIdentifier:@"ViewControllerStoryBoardID"];
[self presentViewController:vc animated:YES completion:nil];

Schnell:

let secondViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ViewControllerStoryBoardID")   
self.presentViewController(secondViewController, animated: true, completion: nil)
1
user4410354

Es wird nicht empfohlen, ViewDidLoad oder ViewWillAppear selbst aufzurufen.

Fügen Sie im ViewDidLoad eine loadData () - Funktion zum Vorbereiten der Daten ein. Dies wird im ersten Durchlauf ausgeführt.

Wenn Sie neu laden möchten, rufen Sie loadData () erneut auf, um die Daten vom Modell abzurufen. In einem tableView-Aufruf reloadData () oder in einer regulären Ansicht setNeedsDisplay ().

1
Vincent

Initialisieren Sie den View-Controller erneut

YourViewController *vc = [[YourViewController alloc] initWithNibName:@"YourViewControllerIpad" bundle:nil];
[self.navigationController vc animated:NO];
0