2013-02-10 21 views
6

Ho visto questo essere chiesto qui molte volte ma nessuna delle soluzioni ha funzionato per me. Qui è il mio frammento di codice:UITableView Celle personalizzate Scomparsa del contenuto dopo lo scorrimento

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

    if (cell == nil) 
    { 
     NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil]; 
     cell = [topLevelItems objectAtIndex:0]; 
    } 
    cell.fooData = [self.bugs objectAtIndex:indexPath.row];  
    return cell; 
} 

Poi ho in ViewDidLoad

cellLoader = [UINib nibWithNibName:@"DemoTableViewCell_sched" bundle:[NSBundle mainBundle]]; 
+0

Hai controllato che nella tua cella tu specifichi l'identificatore? –

+0

Sì. Nella cella personalizzata mi sono assicurato che l'identificatore fosse "DemoTableViewCell_sched". Cos'altro dovrei controllare? – user1235155

+0

[Questo thread] (http://stackoverflow.com/a/36037259/4034301) ha funzionato per me. Ottima soluzione ..! –

risposta

2

Il problema è andato via quando:

  1. La vista tabella contiene molte cellule (10+),

  2. Ogni cella ha un'altezza superiore a 50.

Strano.

+0

Questo link ha funzionato per me. http://stackoverflow.com/a/36037259/4034301 –

-1

È necessario calcolare l'altezza corretta per ogni cella in base al suo contenuto.

questo può essere fatto nel metodo delegato UITableView:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
     CGFloat height; 
     //Calculate height for each cell 
     return height; 
} 
16

Nel mio caso, ciò che stava accadendo era che non avevo mantenuto una forte puntatore dataSource del Tableview. Quindi, quando la vista tabella è stata scorsa, l'origine dati era già stata liberata e impostata su zero, il che ha portato alla visualizzazione della tabella ottenendo 0 per numRowsForSection e nils per cellForRowAtIndexPath.

Se qualcuno ha un problema simile, è possibile controllare se l'origine dati e/o gli oggetti personalizzati vengono conservati correttamente.

+0

Grazie per averlo condiviso, risolve il mio problema! – N0un

2

Nel mio caso il problema era il seguente:

  1. ho avuto un caso particolare in cui vista vista del controllore non è stato spinto o presentato modale ma ho aggiunto come una visualizzazione secondaria (view.addSubview) per un'altra vista.

  2. In questo modo la vista corrente veniva mantenuta dalla sua superview, ma l'oggetto ViewController (che era DataSource per la vista tabella) non veniva conservato e usciva dalla memoria.

  3. Ho dovuto assegnare il controller di visualizzazione a una variabile (forte), quindi è rimasto in memoria.

1

So che questa domanda ha già una risposta, ma solo per Googler:

Nel mio caso il problema era che i punti di vista erano ancora nel UITableViewCell ma dopo lo scorrimento a causa di un errore nella proprietà frame dei punti di vista, sono passati sotto il prossimo UITableViewCell e non sono riuscito a vederli.

penso come la risposta accettata ha chiaramente detto che:

Il problema è andato via quando:

  • La vista tabella contiene molte cellule (10+),

  • Ogni cella ha un'altezza superiore a 50.

Aveva problema simile al mio.

-1

Questo comportamento a Tableview aveva ottenuto me battere la testa letteralmente. Venuto fuori che avevo usato

@property (weak, nonatomic) NSMutableArray *itemsArray; 

invece di

@property (strong, nonatomic) NSMutableArray *itemsArray; 

Spero che queste informazioni aiuta.

+0

non aiuta davvero. Se ho scorrere verso il basso, la cella rigenera ancora e visualizzare sbagliato UI –

+0

per cominciare, controllare ciò che i dati viene passato dal NSArray/NSDictionary che si sta utilizzando, mentre tornava la cella in cellForRowAtIndexPath, può essere prova di nuovo i vincoli (per quanto riguarda il frame & limiti nel codice) o impostazioni di Autolayout. Considera anche la possibilità di votare con il voto negativo @wcobbett, come ho appena scritto in codice per evitare di leggere lunghe risposte e specificare quale problema si debba affrontare in teoria o nel codice. – skypirate

8

State aggiungendo l'UITableViewController come addSubView? Quindi dovresti fare così:

1) addChildViewController,then 
2) addSubview 
The problem is delegate and datasource of the tableview getting nil since the parent controller unable to a reference to the UITableViewController. 
Problemi correlati