45 votes

Rechargement d'un ViewController

J'ai un contrôleur de vues qui affiche des informations (pas de vues de tables).

J'ai un appel de mise à jour vers un serveur distant qui remplit ma base de données. Je voudrais recharger complètement mon ViewController une fois l'appel de mise à jour effectué.

Que dois-je faire ?

27voto

Moaz Saeed Points 753

Si vous savez que votre base de données a été mise à jour et que vous voulez simplement rafraîchir votre ViewController (ce qui était mon cas). Je n'ai pas trouvé d'autre solution mais ce que j'ai fait, c'est que lorsque ma base de données a été mise à jour, j'ai appelé :

[self viewDidLoad] ;

à nouveau, et ça a marché. Rappelez-vous que si vous surchargez d'autres viewWillAppear ou loadView, appelez-les aussi dans le même ordre. comme.

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

Je pense qu'il devrait y avoir une solution plus spécifique comme le bouton de rafraîchissement dans le navigateur.

17voto

juaniyot Points 13

Si vous souhaitez recharger un ViewController initialement chargé à partir d'un XIB, vous pouvez utiliser l'extension UIViewController suivante :

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

9voto

RuiAAPeres Points 14372

Vous n'avez vraiment pas besoin de le faire :

[self.view setNeedsDisplay];

Honnêtement, je pense que c'est une solution du type "espérons le meilleur", dans ce cas . Il existe plusieurs approches pour mettre à jour votre UIView s :

  1. KVO
  2. Notifications
  3. Délégation

Chacun a ses avantages et ses inconvénients. En fonction de ce que vous mettez à jour et du type de "connexion" que vous avez entre votre couche métier (la connectivité du serveur) et l'application UIViewController Je peux vous en recommander un qui conviendrait à vos besoins.

8voto

Patel Jigar Points 1358

Essayez ceci, vous devez appeler les deux méthodes pour recharger la vue, car celle-ci fonctionne pour moi,

-Objectif C

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

-Swift

self.viewDidLoad()
self.viewWillAppear(true)

2voto

Dirigez vous à nouveau vers votre ViewController. Dans ma situation [self.view setNeedsDisplay]; y [self viewDidLoad]; [self viewWillAppear:YES]; ne fonctionne pas, mais la méthode ci-dessous a fonctionné.

Dans l'objectif C

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

Swift :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X