2013-10-30 17 views
8

Sto tentando di aggiungere un sottotitolo alle mie celle tableview, ma non vengono visualizzate. Dov'è l'errore?Tableview sottotitoli su IOS7

La riga [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle] aggiornata, anche con iOS 7?

migliori saluti

Frank


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

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

    cell.textLabel.text = @"TestA"; 
    cell.detailTextLabel.text = @"TestB"; 

    return cell; 
} 
+0

che sembra corretto me. Hai usato il file Storyboard/Xib? Assicurati di mettere un prototipo di cella laggiù. –

+0

Stai dicendo che questo codice produce solo il titolo principale mostrato ma non il sottotitolo per ogni riga? È tutto in codice o usi le celle prototipo? – rmaddy

risposta

5

Questo codice:

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

non verrà mai eseguito perché dequeueReusableCellWithIdentifier: forIndexPath: è garantito per allocare una nuova cella.

Sfortunatamente, registerClass:forCellReuseIdentifier: non consente di specificare un UITableViewCellStyle.

Modificare dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath in dequeueReusableCellWithIdentifier:CellIdentifier semplicemente. Questo metodo non garantisce che venga restituita una cella. * In caso contrario, il codice creerà quindi una nuova cella con lo stile desiderato.


* - (Si, se si sta utilizzando uno storyboard, come sottolinea rdelmar, ma non è il caso qui.)

+1

"Questo metodo non garantisce la restituzione di una cella" - non necessariamente vero.Se la cella è stata creata nello storyboard, anche questo metodo restituisce una cella. – rdelmar

+0

Se hai registrato una classe o un pennino con la tabellaView, questa restituirà automaticamente un'istanza e la cella non sarà mai nulla. Le risposte – estobbart

0

Ho avuto un problema simile e nessuna soluzione su internet lavorato per me. Si scopre che ero un idiota. Pubblicherò la mia soluzione solo nel caso in cui qualcun altro sperimentasse uno scenario simile.

Io parto dal presupposto che si sta utilizzando storyboard, hanno creato un prototipo e impostare lo stile di sottotitolo

In storyboard documento contorno, assicurarsi che si seleziona la cella protoptype e selezionare il sottotitolo. Vedi immagine:

enter image description here


Ora sì che il colore del carattere etichetta è di una natura che ci visibile sul vostro sfondo!

0

Semplicemente sottoclasse UITableViewCell e sovrascrivere

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;

con la prima linea essendo

[super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; 

e registrare la vostra classe cella con la visualizzazione della tabella

[tableView registerClass:[YourCellSubclass class] forCellReuseIdentifier:@"YourCellID"];
1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath { 
UITableViewCell *cell = nil; 
cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
if (cell == nil) 
{ 
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"]; 
} 
cell.textLabel.text = @"Title1"; 

cell.detailTextLabel.text = @"Subtitle 1"; 

return cell; 
} 
+0

dovrebbero includere una descrizione della soluzione. – Enkode

+0

Assegna alla cella un identificatore dalla vista Impostazioni e scrivi questo codice in ** cellForRowAtIndexPath **, dove ** cel.detailTextLabel.text ** è il sottotitolo. – Jamil