2011-06-30 5 views
0

Donc, j'ai deux barres de recherche, un couple de boutons et une tableVoir ci-dessous ceux (oui, tout cela) dans une vue. Et j'ai aussi une barre de navigation sur tout cela avec un bouton de retour.Pourquoi ma vue ne se recharge-t-elle pas?

Pour une opération particulière, je supprime toutes les barres de recherche, les boutons et je n'affiche qu'une seule uitableviewcell dans ma vue.

Si j'appuie sur éditer, je veux que l'ensemble de la vue soit rechargé, pas seulement le tableau, mais je veux que l'affichage ait les barres et boutons de recherche et l'écran de navigation. J'ai fait [self.view reloadInputViews] dans le IBAction du bouton edit. Le contrôle va ici, mais la vue n'est simplement pas rechargée. Pourquoi? ReloadInputViews est spécifiquement utilisé pour les vues firstResponders.

Répondre

-1

Je ne sais pas comment j'obtiens la réponse moi-même juste après l'avoir posté ici sur StackOverflow. Désolé pour les gars de trouble (soupir!)

Je l'ai fait [self viewDidLoad];

+0

C'est une très vieille question, mais appeler '[self viewDidLoad]' n'est pas une bonne pratique. Cela peut fonctionner dans le cas que vous avez mentionné mais j'ai fourni une réponse supplémentaire. – Jessedc

0

Probablement self.view n'est pas le premier répondant à ce moment-là. Mais pourquoi vous voulez faire tout cela en utilisant "reloadInputViews", ce ne serait pas plus facile à utiliser: [self.view setNeedsLayout]?

+0

qu'est-ce que c'est: O? – Legolas

+0

[self.view setNeedsLayout] force la méthode "layoutSubviews" à être appelée; dans cette méthode, en fonction de l'état du bouton "modifier" (sélectionné/non sélectionné), vous relancerez votre vue en affichant/masquant les sous-vues et en changeant le cadre de vue de la table; Si vous avez également besoin de modifier le contenu de la vue de table, appelez [tableView reloadData] – viggio24

+0

nevermind dude. Merci quand même – Legolas

0

Une meilleure façon de gérer l'actualisation de l'état d'une vue est de faire abstraction de la configuration des sous-vues de la vue de votre UIViewController dans une méthode personnalisée que vous pouvez appeler au départ de viewDidLoad et encore comme une action de votre UIbarButtonItem.

- (void)viewDidLoad { 
    //Specific, non repeated view setup 
    [self resetViewState]; 
} 

- (void)resetViewState { 
    //Repeatable view setup 
} 

La raison pour laquelle il vaut la peine de faire la distinction est parce que viewDidLoad est appelée automatiquement par le système après la vue est paresseux chargé. Par conception, ce n'est pas une méthode qui devrait être appelée plusieurs fois par vue. Il sera à nouveau appelé si la vue est défaussée et recréée.

Vous pouvez également déplacer la disposition des sous-vues de votre UIViewController en viewWillLayoutSubviews si vous avez besoin d'effectuer une mise en page, encore une fois cela est appelé par le système à différents moments.

Questions connexes