2009-06-04 6 views
8

J'ai un UITableView avec un UITableViewCell personnalisé. Dans cellForRowAtIndexPath, j'attribue une police à une étiquette dans chaque cellule, puisque l'utilisateur peut changer la taille de la police à tout moment. Pour changer la taille de la police, l'utilisateur clique sur un bouton sous la table, ce qui permet de voir une autre vue avec les paramètres. Une fois qu'ils ont choisi une taille de police et cliquez sur terminé, cette vue disparaît et la vue de la table s'affiche à nouveau. Je montre une cellule par zone de visualisation. Ainsi, l'utilisateur ne voit pas la police changer jusqu'à ce qu'il défile à la cellule suivante. La cellule actuelle est celle que j'aimerais mettre à jour.Comment rafraîchir UITableViewCell?

J'ai essayé reloadData à partir de l'écran des paramètres, mais cela n'a pas fonctionné. La tableview est un UITableViewController mais viewWillAppear ne se déclenche jamais une fois que l'écran des paramètres disparaît. J'ai essayé de faire de la cellule personnalisée une propriété de la vue de table afin qu'elle soit accessible à partir de la vue des paramètres, puis appelée setNeedsDisplay et setNeedsLayout. Cela n'a pas fonctionné non plus. Aucune suggestion?

Répondre

5

Pour les cellules qui sont encore là, vous devez mettre à jour la police de l'étiquette. Vous aurez besoin d'un moyen d'accéder à l'étiquette personnalisée dans votre cellule personnalisée.

Après avoir changé la taille de la police faire quelque chose comme:

for (MyCell* cell in [theTableView visibleCells]) { 
    [cell.myLabel.font = newFont]; 
} 
+0

J'ai essayé votre code dans la vue des paramètres mais toujours pas de changement sur la cellule actuelle une fois que le tableau s'affiche. Si tout ce que je fais est d'appeler reloadData sur la tableview à partir de la vue des paramètres, cela fonctionne très bien. Cependant, cela semble être une façon très coûteuse et exagérée de le faire. – 4thSpace

+0

J'ai édité ma réponse après avoir mieux compris le problème. –

+0

Merci beaucoup! – Luda

0

Je suis curieux, comment peut-on afficher l'écran des paramètres? viewWillAppear devrait être appelé dans des circonstances normales au retour. Utilisez-vous

[self presentModelViewController:animated:] 

ou

[self.navigationController pushViewController:animated:] 

Ceux-ci devraient à la fois le travail. Si, d'un autre côté, vous ajoutez simplement la vue des paramètres en tant que sous-vue de la fenêtre ou de la vue en cours ou quelque chose, la suppression n'appelle pas viewWillAppear sur le contrôleur de vue de table. Par conséquent, si vous n'utilisez pas l'une de ces deux méthodes, faites-le. Si vous l'êtes déjà, alors définir la police de la cellule est vraiment aussi simple que d'obtenir la cellule et de définir sa police. Si vous utilisez un UITableViewCell standard, qui est fait avec

cell.font = newFont; 

Si vous utilisez une sous-classe personnalisée, évidemment je ne peux pas vous dire exactement comment il a besoin de travailler, mais la façon dont Nicolas a il est correct .

+0

J'utilise presentModalViewController. La solution ci-dessous a bien fonctionné. – 4thSpace

12

Dans votre UITableViewCell personnalisé, appelez [self setNeedsLayout]; et il devrait repeindre votre cellule à la prochaine boucle. Je l'utilise pour le chargement d'image asynchrone depuis que je tire l'image du Web et ça gonfle.

+0

Cela a fonctionné pour moi, merci. J'ai un peu de KVO où je préfère vraiment recharger une seule cellule, donc cela fonctionne bien. – Sam