web-dev-qa-db-fra.com

Dans UITableView, cell.detailTextLabel.text ne fonctionne pas… pourquoi?

Dans tableView:cellForRowAtIndexPath: j'ai les éléments suivants:

cell.textLabel.text = @"label";
cell.detailTextLabel.text = @"detail";

La textLabel s'affiche comme prévu, mais la detailTextLabel n'apparaît pas du tout, bien qu'il n'y ait pas de diagnostic. Ce à quoi je m'attendais, c’est que le texte "en détail" apparaisse dans la cellule de la deuxième ligne, en dessous du texte "normal", éventuellement avec une taille de police inférieure.

La même question est posée dans une autre publication ici et l'utilisateur "jbrennan" répond que le style de la cellule tableview doit être autre chose que UITableViewCellStylePlain. Cependant, il semble qu'il n'y ait que deux styles possibles, UITableViewCellStylePlain et UITableViewCellStyleGrouped. J'obtiens le même résultat avec l'un ou l'autre (l'étiquette de détail n'apparaît pas).

Existe-t-il un autre style de cellule que je ne vois pas dans la documentation? Est-ce que UITableView a changé dans la dernière mise à jour et detailTextLabel n'est plus disponible? Dois-je faire quelque chose de plus pour le faire apparaître? Aucune suggestion?

J'utilise xcode 3.2.5 et je construis pour iPhone 4.2 Simulator.

41
RobertL

Votre initialisation doit être changée en ceci: 

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier] autorelease];

J'ai souligné et mis en gras la partie que vous devez changer. 

115
Aurum Aquila

Vous devez définir le type de cellule sur Sous-titre lorsque vous l'allouez. 

if (!cell) {
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:BasicCellIdentifier];
}
14
W Dyson

Lorsque vous utilisez Xcode 4.2, définissez le style de cellule d'affichage de table sur Sous-titre dans Storyboard. dequeueReusableCellWithIdentifier retournera une cellule instanciée.

12
oragorn

Définir le style de la cellule d'affichage de la table sur Sous-titre dans le Storyboard 

et écrivez ce code pour configurer votre cellule 

if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:BasicCellIdentifier] autorelease];
}

enter image description here

4
Mohammad Shaker
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                           reuseIdentifier:CellIdentifier];
3
user2964955

Swift 3:

Si vous créez une cellule en remplaçant la fonction "cellForRowAt indexPath":

let tableContent = ["1", "2", "3", "4", "5"]
let tableDetailContent = ["a", "b", "c", "d", ""]

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "yourCellIdentifier")
    cell.textLabel?.text = tableContent[indexPath.row]
    cell.detailTextLabel?.text = tableDetailContent[indexPath.row]

    return cell
}

 enter image description here

Cette partie de code ci-dessus vous permet de définir votre detailTextLabel .. Vous pouvez définir ce que vous voulez sur le storyboard pour le style de cellule d'affichage du tableau (Personnalisé, De base, Détail de droite, Détail de gauche, Sous-titre), cette ligne le remplacera:

style: UITableViewCellStyle.subtitle
1
balazs630

Pour Swift 4, bien que la technique soit la même quelle que soit la version (ou Obj-C) -

Je sais que c'est un peu tard pour le parti, mais beaucoup de réponses compliquent les choses beaucoup plus que nécessaire. 

En supposant que vous utilisiez un story-board, tout ce que vous avez à faire est de définir le style de la cellule d'affichage de la table dans le story-board sur 'Sous-titre', puis simplement -

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myIdentifier", for: indexPath)

    cell.textLabel?.text = "Title"
    cell.detailTextLabel?.text = "Subtitle..."

    return cell
}

Il n'est absolument pas nécessaire d'utiliser du code pour instancier une cellule, il suffit de le réutiliser comme d'habitude.

1
SomaMan
  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier: CellIdentifier];
0
BrandonYum