2013-05-23 15 views

risposta

29

creare una proprietà per ogni cella che si desidera modificare nel controllore vista tabella, in questo modo:

@property (weak) IBOutlet UITableViewCell *cell1; 
@property (weak) IBOutlet UITableViewCell *cell2; 

Collegare ciascuno a una cella in Interface Builder.

quando hai solo bisogno di cambiare il testo dell'etichetta, è possibile utilizzare

self.cell1.textLabel.text = @"New Text"; 

Se è necessario sostituire l'intero marchio, utilizzare

UILabel *newLabel = [[UILabel alloc] init]; 
self.cell2.textLabel = newLabel; 
+1

Grande !!! Grazie. Non so che textLabel abbia una proprietà text. – vZ10

+2

No, non è necessario conservare tutte le celle, perché è necessario riutilizzare le celle e non caricare tutte le celle nella memoria, è necessario disporre solo delle celle che si stanno visualizzando caricate! – ggrana

+1

@ggrana Dato che si tratta di celle statiche con cui abbiamo a che fare, non è probabile che siano molte di queste, quindi l'utilizzo della memoria non sarà così significativo. Tuttavia, sono d'accordo sul fatto che la tua risposta modificata sia migliore della mia, quindi l'ho svalutata. –

2

È possibile ottenere la cellula dalla vista tabella utilizzando il metodo cellForRowAtIndexPath, sarà necessario definire un punto vendita che recuperi la vista tabella.

__weak IBOutlet UITableView *tableView; 

dopo che è possibile ottenere la cella così:

NSIndexPath* indexPath = [NSIndexPath indexPathForRow:yourRow inSection:yourSection]; 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
[[cell textLabel] setText:@"Your new text"]; 

Forse dopo aver impostato il testo che sarà necessario regolare l'etichetta, o la vostra altezza della cella, se si desidera un aiuto più profondo fornire più informazioni, e sarò felice di aiutarti.

E hai finito, spero che sia d'aiuto.

+2

Non è necessario dichiarare un punto vendita sul TableView poiché si sta già utilizzando un UITableViewController. –

+4

un UITableView configurato con 'celle statiche' può esistere solo nel contesto di un UITableViewController. –

10

@RossPenman ha inviato una buona risposta.

@ggrana notato un potenziale problema a che fare con la memoria e il riutilizzo delle cellule, tuttavia non preoccuparti che ...

Per un UITableView con celle statiche tutte le cellule sono istanziati in anticipo, prima di viewDidLoad viene chiamato UITableViewController e non viene riutilizzato nel modo in cui sono le celle dinamiche. In quanto tale, puoi anche prendere lo IBOutlets direttamente allo UITextFields, UISwitches, UILabels e le cose che ti interessano davvero che hai lasciato cadere nelle tue celle statiche nello Storyboard.

+0

Non sapevo che puoi creare 'IBOutlet' da celle statiche. Devo scavare di più nella documentazione, immagino. –

4

Avevo bisogno di questo.

dispatch_async(dispatch_get_main_queue(), ^{ 
    (...textLabel updates) 
    [self.tableView reloadData]; 
}); 
0

Si può fare qualcosa di simile

for (int section = 0; section < [table numberOfSections]; section++) { 
    for (int row = 0; row < [table numberOfRowsInSection:section]; row++) { 
     NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section]; 
     UITableViewCell* cell = [self cellForRowAtIndexPath:cellPath]; 
     cell.backgroundColor = [UIColor blackColor]; 
     cell.textLabel.textColor = [UIColor whiteColor; 
     cell.textLabel.text = @"Your text"; 
    } 
} 

Inoltre, assicurarsi di tenere le modifiche di viewDidAppear e per metterli in viewWillAppear altrimenti si incorrere in problemi

0

Speranza che funziona :

@IBOutlet weak var yourTextField: UITextField! 
private var yourText: String? 

ho appena personalizzato nella delegato di questo Tableview:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    guard let yourText = yourText else { return } 
    yourTextField.text = yourText 
} 

Quando si modifica il testo:

yourText = "New text here" 
tableView.reloadData() 
1

Swift 3 soluzione:

Prima di tutto un IBOutlet di statica TableViewCell

@IBOutlet weak var cellFirst: UITableViewCell! 

quindi in viewDidLoad cambia l'etichetta Nome.

cellFirst.textLabel?.text = "Language" 

Nota: Se è collegato un'etichetta TableViewCell poi basta nasconderla usando storyboard.

Problemi correlati