web-dev-qa-db-fra.com

Erreur étrange lors de l'ajout d'éléments aux cellules prototypes dans le storyboard-IB

J'ai un assez gros projet (~ 20 scènes). L'un d'eux est un TableViewController avec une classe UITableViewController personnalisée. J'ai donné à la cellule un identifiant de réutilisation et y ai ajouté une étiquette. Lorsque j'essaie de faire Ctrl + glisser l'étiquette vers le fichier d'en-tête UITableViewController pour créer une sortie, j'obtiens l'erreur suivante:

erreur: Configuration illégale: la connexion "tableInfoView" ne peut pas avoir un objet prototype comme destination.

Qu'est-ce que c'est? Suis-je en train d'oublier quelque chose d'évident? Ou dois-je créer une classe de cellule personnalisée et y faire glisser la sortie? Si oui, comment puis-je spécifier les données qui sont affichées de manière unique pour chaque cellule à partir de UITableViewController?

43
Alex Godbehere

En fait, vous ne pouvez pas simplement créer une sortie à partir d'un prototype de cellule dynamique dans le contrôleur de vue délégué UITableView.

Vous devrez sous-classer UITableViewCell puis attribuer cette classe à votre prototype.

Ensuite, vous pouvez Ctrl-Glisser de l'étiquette vers le fichier d'en-tête de sous-classe UITableViewCell.

Enfin, vous pouvez accéder à cette sortie dans le code délégué après y avoir importé le fichier d'en-tête UITableViewCell.

Ceci est documenté par Apple there dans la section "The Technique for Dynamic Row Content").

67
dulgan

ou vous pourriez donner à l'étiquette une étiquette (par exemple 100) et utiliser

myLabel = [myTableView viewForTag:100];

obtenir le label

10
Martin Lockett

Marquez l'étiquette et vous pouvez atteindre l'étiquette n'importe où dans le contrôleur de vue comme avec viewWithTag à partir de la vue de table.

    UILabel *destinationLabel = (UILabel *)[self.tableView viewWithTag:1];


    destinationLabel.text = @"Label Destaination";
2
Reaper

J'ai eu la même erreur moi-même. Juste pour ajouter une autre cause fondamentale potentielle pour les futurs lecteurs:

Dans mon cas, j'ai copié un contrôle (un bouton dans ce cas) d'une cellule prototype à la suivante et l'action faisait toujours référence à la cellule voisine. Ma table a plusieurs cellules prototypes différentes.

Le fait qu'il s'agissait réellement d'une sous-classe appropriée de UITableViewCell qui était correctement connectée à la cellule prototype a rendu difficile de voir réellement l'erreur.

2
Hermann Klecker

J'ai fait face au même problème mais plus tard, il s'est avéré que c'était juste une erreur stupide. J'ai par erreur glissé l'étiquette de Cell vers le @interface De mon contrôleur

Cela pourrait aussi être votre problème. il suffit de cocher une fois.

1
thesummersign