2009-06-24 6 views
1

J'ai une tableView qui est vaguement basée sur le DetailViewController dans les anciens SQLiteBooks. C'est créé par programme. Chaque cellule affiche une seule valeur qui, lorsqu'elle est cliquée, affiche un editingController générique qui permet à l'utilisateur de modifier cette valeur. Sauf que ... J'ai aussi un contrôle segmenté dans l'en-tête de cette tableView qui selon son réglage doit changer un attribut (textColor) sur un UILabel dans l'un des 8 ± tableViewCells dans la table. Je n'ai pas d'IBOutlets pour ce tableau parce que je l'ai créé entièrement en code. Alors, que dois-je faire dans ma (void) segmentAction: (id) sender méthode (déclenchée lorsque segmentedControl change d'état) pour me permettre d'accéder & changer cette valeur et l'afficher à l'utilisateur? Lorsque la table a été créée (cellForRowAtIndexPath) chaque UILabel a été appelé "valeur" et a ensuite ajouté: [cell.contentView addSubview: valeur].Modifier les propriétés de UILabel dans un TableViewCell

J'ai essayé de définir une propriété du viewController lui-même qui est ensuite vérifiée pendant cellForRowAtIndexPath et fait l'entreprise textColor là ... puis en ajoutant [self.tableView setNeedsDisplay] à mon segmentAction: méthode mais ne semble pas fonctionner?!?

Des idées?

Répondre

0

Dans la classe qui implémente cellForRowAtIndexPath, vous pouvez également stocker une référence à UILabel que vous souhaitez lorsque vous générez la cellule appropriée. Cela signifie que vous pourriez modifier l'étiquette et la marquer pour la repeindre.

Alternativement vous pourriez tenir un BOOL local pour montrer que la cellule devrait être dessinée différemment - et l'utiliser ensuite dans le cellForRowAtIndexPath: pour le dessiner avec un arrière-plan.

Vous trouverez peut-être ce plus facile avec l'objet 3.0 Textlabel dans un UITableViewCell

+0

Doh! un ivar simple dans mon contrôleur qui pointe vers UILabel quand il a été créé! Fonctionne très bien! THX. – Meltemi

1

Si vous connaissez le chemin d'index de la cellule que vous souhaitez modifier, vous pouvez appeler cellForRowAtIndexPath: pour récupérer le UITableViewCell. Une fois que vous avez cela, vous pouvez obtenir le UILabel. Si vous définissez la balise UILabel à une valeur utile lors de sa création, vous pouvez la récupérer à partir de UITableViewCell via viewWithTag :.

+0

Le problème que j'ai avec cela, ou tout au moins mon interprétation de cette approche, est que j'ai beaucoup trop de choses dans mon cellForRowAtIndexPath impliqué obtenir la table dessinée en premier lieu. Bien qu'avec des arguments conditionnels viennent je pourrais probablement obtenir ce travail ... – Meltemi

Questions connexes