web-dev-qa-db-fra.com

UITableViewCell n'affichant pas detailTextLabel.text - Swift

Le texte de détail (sous-titre) n'apparaît pas. Les données sont disponibles, cependant, car lorsqu'un appel println () est ajouté, il imprime facultatif ("data") sur la console avec les données attendues. Dans le storyboard, UITableViewController est défini sur la classe appropriée, le style de cellule de la vue Tableau est défini sur "Sous-titre" et l'identificateur de réutilisation est défini sur "cellule". Comment puis-je obtenir les informations de sous-titres à afficher?

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell

    dispatch_async(dispatch_get_main_queue(), { () -> Void in

        cell.textLabel.text = self.myArray[indexPath.row]["title"] as? String
        cell.detailTextLabel?.text = self.myArray[indexPath.row]["subtitle"] as? String

        println(self.myArray[indexPath.row]["subtitle"] as? String)
        // The expected data appear in the console, but not in the iOS simulator's table view cell.

    })
    return cell
}
26
kurple

Votre code a l'air bien. Allez simplement dans le storyboard et sélectionnez la cellule de votre vue tableau -> Maintenant, allez à Inspecteur des attributs et choisissez le style à sous-titre.

Suivez ceci selon la capture d'écran ci-dessous.

 Change this option

J'espère que ça a aidé ..

43
onCompletion

Si vous souhaitez toujours utiliser la cellule prototype de votre storyboard, sélectionnez le style UITableViewcell comme sous-titre. ça va marcher.

15
keshav

Si vous le faites par programme sans cellules dans le constructeur d'interface, ce code fonctionne comme un charme dans Swift 2.0+

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    yourTableView.delegate = self
    yourTableView.dataSource = self
    yourTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "subtitleCell")

}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return yourTableViewArray.count
}

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    let cell: UITableViewCell = yourTableView.dequeueReusableCellWithIdentifier("subtitleCell", forIndexPath: indexPath) as UITableViewCell

    cell.textLabel?.text = "the text you want on main title"
    cell.detailTextLabel?.text = "the text you want on subtitle"

    return cell
}
6
ColossalChris

Si vous définissez le texte sur nil quelque part lorsque vous essayez de le définir sur une valeur non nulle, la vue contenant le texte sera manquante. Cela a été introduit dans iOS8. Essayez plutôt de définir un caractère vide @" ".

Voir ceci: Les sous-titres de UITableViewCell ne seront pas mis à jour

4
Hugh Jeffner

Pour ce que ça vaut: j'ai eu le problème du détail n'apparaissant pas. C'était parce que j'avais enregistré la cellule tableView, ce que je n'aurais pas dû faire car le prototype de la cellule a été défini directement dans le storyboard.

2
claude31

 enter image description here

Essayez ceci, ça marche pour moi (Swift 4.2)

let cell = UITableViewCell(style: .value1, reuseIdentifier: "cellId")

Objectif c :

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellId"];
1
Zouhair