2011-01-29 14 views
41

In tableView:cellForRowAtIndexPath: ho il seguente:In UITableView, cell.detailTextLabel.text non funziona ... perché?

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

I textLabel spettacoli come previsto, ma il detailTextLabel non appare per nulla, anche se non c'è diagnostica. Quello che mi aspettavo era che il testo "dettaglio" apparisse nella cella su una seconda riga, sotto il testo "normale", possibilmente con una dimensione del carattere più piccola.

La stessa domanda viene posta in un altro post qui e l'utente "jbrennan" ha risposto che lo stile di cella tableview deve essere diverso da UITableViewCellStylePlain. Tuttavia, sembra che ci siano solo due possibili stili, UITableViewCellStylePlain e UITableViewCellStyleGrouped. Ottengo lo stesso risultato con entrambi (l'etichetta di dettaglio non appare).

C'è un altro stile di cella che non vedo nella documentazione? UITableView è stato modificato nell'ultimo aggiornamento e detailTextLabel non è più disponibile? Devo fare qualcosa in più per farlo apparire? Eventuali suggerimenti?

Sto usando xcode 3.2.5 e costruisco per iPhone 4.2 Simulator.

risposta

111

vostro inizializzazione deve essere modificato a questo:

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

ho sottolineato e in grassetto la parte è necessario modificare.

+0

Giusto! Grazie. Avevo provato a cambiare lo stile in Subtitle, ma ho cambiato UITableViewStyle invece di UITableViewCellStyle e questo non è stato compilato, quindi ho pensato che lo stile Sottotitoli non fosse più disponibile. – RobertL

+1

Haha! Facciamo tutti degli errori stupidi durante la codifica. Penso che se Apple disabilitasse lo stile dei sottotitoli, ci sarebbero state rivolte. –

+3

Sembra che inizializzerà una nuova UITableViewCell ogni volta, invece di dequeuing dallo stack per preservare la memoria. Sembra che l'unico modo per riutilizzare le celle di stile UITableViewCellStyleSubtitle sia la sottoclasse, l'override dell'inizializzatore e chiamare il solito '[tableView dequeueReusableCellWithIdentifier: @" ReuseIdentifier "];' Qualcuno può confermare o negare questo? Vedi la discussione su 'initWithStyle: reuseIdentifier:' https://developer.apple.com/library/ios/documentation/Uikit/reference/UITableViewCell_Class/index.html#//apple_ref/occ/instm/UITableViewCell/initWithStyle:reuseIdentifier: –

14

È necessario impostare il tipo di cella su Sottotitoli quando lo si assegna.

if (!cell) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:BasicCellIdentifier]; 
} 
+0

Destra! Grazie. Vedi il mio commento alla risposta precedente. – RobertL

12

Quando si utilizza Xcode 4.2, impostare lo stile di cella Visualizza tabella su Sottotitoli in Storyboard. dequeueReusableCellWithIdentifier restituirà una cella istanziata.

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

Apparecchiare la tavola delle cellule di vista Stile di sottotitolare in Storyboard

e scrivere il codice per configurare si Cell

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

enter image description here

0

Swift 3:

Se sei m aking il tuo cellulare con l'override la funzione "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

Questa parte di codice dall'alto consente di impostare il vostro detailTextLabel .. È possibile impostare quello che vuoi su storyboard per Table View stile cellulare (Personalizzato, Base, Destra, Sinistra, Sottotitolo), questa linea la sovrascriverà:

style: UITableViewCellStyle.subtitle