web-dev-qa-db-fra.com

Les points de vente ne peuvent pas être connectés au contenu répété iOS

Je viens de créer une application et j'ai commencé à connecter @ IBOutlet au storyboard. Je connecte certaines d’entre elles aux étiquettes d’une cellule prototype de UITableViewCell avec un style de base. Lorsque je le connecte, je reçois cette erreur dans le Storyboard:

La prise detailText de TableViewController vers UILabel n'est pas valide. Les prises ne peuvent pas être connectées à un contenu répétitif.

Est-ce que quelqu'un peut m'aider? Je l'ai configuré comme je le fais toujours avec succès, mais cette fois, il m'a jeté cette erreur.

129
Tomblasta

Créez une sous-classe de cellules de vue tableau et définissez-la comme classe du prototype. Ajoutez les sorties à cette classe et connectez-les. Maintenant, lorsque vous configurez la cellule, vous pouvez accéder aux prises.

155
Wain

Il existe deux types de cellules de vues de tableau qui vous sont fournies via le storyboard: Prototypes dynamiques et Cellules statiques.

 enter image description here

1. Prototypes dynamiques

Depuis le nom, ce type de cellule est généré dynamiquement. Ils sont contrôlés par votre code, pas par le storyboard. Avec l'aide du délégué et de la source de données de la vue tableau, vous pouvez spécifier le nombre de cellules, la hauteur des cellules et le prototype de cellules par programmation. 

Lorsque vous faites glisser une cellule vers votre vue tableau, vous déclarez un prototype de cellules. Vous pouvez ensuite créer n'importe quelle quantité de cellules sur ce prototype et les ajouter à la vue tableau à l'aide de la méthode cellForRow, par programme. L'avantage de cela est qu'il vous suffit de définir un prototype au lieu de créer chaque cellule avec toutes les vues ajoutées par vous-même (voir cellule statique). 

Dans ce cas, vous ne pouvez donc pas connecter d’éléments d’interface utilisateur sur le prototype de cellule à votre contrôleur de vue. Vous ne lancerez qu'un seul objet contrôleur de vue, mais vous pourrez avoir plusieurs objets de cellule initiés et ajoutés à votre vue tableau. Il n’est pas logique de connecter le prototype de cellule au contrôleur de vue car vous ne pouvez pas contrôler plusieurs cellules avec une seule connexion de contrôleur de vue. Et vous obtiendrez une erreur si vous le faites.

 enter image description here

Pour résoudre ce problème, vous devez connecter votre étiquette de prototype à un objet UITableViewCell. Une UITableViewCell est également un prototype de cellules et vous pouvez créer autant d'objets de cellules que vous le souhaitez. Chacune d'entre elles est ensuite connectée à une vue générée à partir de votre prototype de cellule de tableau de storyboard.

 enter image description here

Enfin, dans votre méthode cellForRow, créez la cellule personnalisée à partir de la classe UITableViewCell et créez des objets amusants avec l'étiquette.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier") as! YourCell

    cell.label.text = "it works!"

    return cell
}

2. Cellules statiques

D'autre part, les cellules statiques sont bien configurées via le storyboard. Vous devez faire glisser des éléments d'interface utilisateur dans chaque cellule pour les créer. Vous contrôlerez le nombre de cellules, les hauteurs, etc. à partir du storyboard. Dans ce cas, vous verrez une vue de table qui est exactement la même de votre téléphone par rapport à ce que vous avez créé à partir du storyboard. Les cellules statiques sont plus souvent utilisées pour la mise en page, dans laquelle les cellules ne changent pas beaucoup. 

Pour contrôler les éléments d'interface utilisateur d'une cellule statique, vous devrez en effet les connecter directement à votre contrôleur de vue et les configurer.

 enter image description here

43
Fangming

Si vous utilisez une vue sous forme de tableau pour afficher les paramètres et d'autres options (comme l'application intégrée des paramètres), vous pouvez définir votre Contenu de vue de tableau sur Cellules statiques sous l'inspecteur d'attributs . De plus, pour ce faire, vous devez incorporer votre vue Table dans une instance UITableViewController.

20
Justin Domnitz

Ou vous n'avez pas besoin d'utiliser IBOutlet pour faire référence à l'objet dans la vue. Vous pouvez donner l'étiquette dans la valeur de balise tableViewCell a, par exemple, définissez la balise sur123(ceci peut être effectué par l'inspecteur d'attributs). Ensuite, vous pouvez accéder à l'étiquette par 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "someID", for: indexPath)

    let label = cell.viewWithTag(123) as! UILabel //refer the label by Tag

    switch indexPath.row {
    case 0:
        label.text = "Hello World!"
    default:
        label.text = "Default"
    }
    return cell 
}
4
SLN

Avec moi, j'ai une UIViewcontroller et une table avec une cellule personnalisée. Je mappe ma sortie de UILabel dans UItableviewcell à la UIViewController puis j'ai l'erreur.

1
lee

Comme la plupart des gens ont fait remarquer que le sous-classement UITableViewCell résout ce problème . Mais la raison en est interdite car la cellule prototype ( UITableViewCell ) est définie par Apple et vous ne pouvez pas ajouter vos propres prises à cela.

0
Nikhil Muskur