2009-06-04 7 views
8

Ho un UITableView con UITableViewCell personalizzato. In cellForRowAtIndexPath, assegno un carattere a un'etichetta in ogni cella, poiché l'utente può modificare la dimensione del carattere in qualsiasi momento. Per cambiare la dimensione del carattere, l'utente fa clic su un pulsante sotto la vista tabella, che disattiva un'altra vista con le impostazioni. Una volta che hanno scelto una dimensione del carattere e fatto clic, quella vista scompare e la vista tabella viene nuovamente visualizzata. Visualizzo una cella per area di visualizzazione. Quindi l'utente non vede il cambiamento di carattere finché non scorre alla cella successiva. La cella corrente è quella che vorrei aggiornare.Come aggiornare UITableViewCell?

Ho provato il reloadData dalla schermata delle impostazioni ma non ha funzionato. La tableview è un UITableViewController ma viewWillAppear non si attiva mai quando la schermata delle impostazioni scompare. Ho provato a rendere la cella personalizzata una proprietà di tableview in modo che sia accessibile dalla vista delle impostazioni, quindi chiamata setNeedsDisplay e setNeedsLayout. Anche quelli non funzionavano. Eventuali suggerimenti?

risposta

5

Per le celle che sono ancora presenti, è necessario aggiornare il carattere dell'etichetta. Avrai bisogno di un modo per accedere all'etichetta personalizzata nella cella personalizzata.

Dopo aver modificato la dimensione del carattere fare qualcosa come:

for (MyCell* cell in [theTableView visibleCells]) { 
    [cell.myLabel.font = newFont]; 
} 
+0

Ho provato il codice nella visualizzazione delle impostazioni ma non ho ancora modificato la cella corrente una volta visualizzata la tabella. Se tutto ciò che faccio è chiamare reloadData sulla vista tabella dalla vista impostazioni, funziona perfettamente. Tuttavia, sembra un modo molto costoso e eccessivo per farlo. – 4thSpace

+0

Ho modificato la mia risposta dopo aver compreso meglio il problema. –

+0

Grazie mille! – Luda

0

Sono curioso, come si fa a visualizzare la schermata impostazioni? viewWillAppear deve essere chiamato in circostanze normali al momento della restituzione. Usi

[self presentModelViewController:animated:] 

o

[self.navigationController pushViewController:animated:] 

Questi dovrebbero funzionare correttamente. Se, d'altra parte, stai semplicemente aggiungendo la vista delle impostazioni come sottoview della finestra o della vista corrente o qualcosa del genere, quindi rimuovendola non chiamerà viewWillAppear sul controller della visualizzazione tabella.

Quindi, se non stai utilizzando uno di questi due metodi, fallo. Se lo sei già, quindi impostare il carattere della cella è davvero semplice come ottenere la cella e impostarne il carattere. Se si sta utilizzando uno standard UITableViewCell, questo è fatto con

cell.font = newFont; 

Se stai usando una sottoclasse personalizzata, io ovviamente non posso dirvi esattamente come ha bisogno di lavorare, ma il modo in cui Nikolai ha è corretto .

+0

Sto usando presentModalViewController. La soluzione sotto funzionava bene. – 4thSpace

12

Nella UITableViewCell personalizzata, chiamare [self setNeedsLayout]; e dovrebbe ridisegnare la cella al ciclo successivo. Lo uso per il caricamento di immagini asincrone dal momento che sto tracciando l'immagine dal Web e funziona bene.

+0

Questo ha funzionato per me, grazie. Ho qualche KVO in corso in cui preferirei davvero ricaricare solo una cella, quindi funziona bene. – Sam