2013-08-06 13 views
5

Ho esaminato una serie di altre domande SO relative a questa domanda e non ne ho trovato una che si occupasse della mia situazione specifica. Creo un numero variabile di tableViews a livello di codice in un unico metodo. In un secondo momento, vorrei ricaricare i dati in una qualsiasi delle tabelleView in un altro metodo. Vorrei usare ...Ricarica i dati in tabelle create a livello di programmazione

[tableView reloadData]; 

per ricaricare i dati in una tabella specifica. Il problema che sto avendo sta accedendo al TableView che è stato creato programmaticamente in un secondo momento. Il mio pensiero è di impostare un tag univoco per ogni TableView così come è stato creato.

Quindi ecco la mia domanda. È possibile creare e inizializzare un tableView facendo riferimento a un tag di TableView esistente. Ad esempio, con un UIView è possibile ...

UIView *notATableView = [[UIView alloc] viewWithTag:1]; 

che mi permettesse di modificare la vista il cui tag è stato uguale a 1. esiste una possibilità simile per tableViews?

+1

Basta usare variabili di istanza o proprietà - [self.tableView1 reloadData] o [self.tableView2 reloadData] – rdelmar

+0

Sono d'accordo con rdelmar - Perché preoccuparsi impostazione dei tag quando è possibile assegnare le viste tabella create alle proprietà. Molto più mantenibile. – Abizern

risposta

1

Sì, è possibile impostare il tag sul tuo vista tabella quando si crea e recuperare la vista tabella di seguito utilizzando viewWithTag.

// Assuming you've added the table view as a subview to the current view controller 
UITableView *tableView = (UITableView *)[self.view viewWithTag:1]; 

Tuttavia, non lo stai ridistribuendo. Stai solo puntando il dito su di esso.

Poi, basta ricaricare i dati o di fare qualunque cosa:

[tableView reloadData]; 
+0

Grazie! Avevo la sensazione che il casting sarebbe stato parte della soluzione. –

1

Non vorrei usare tag come questo (in generale cerco di stare lontano da loro del tutto). Memorizza le visualizzazioni di tabella create in variabili di istanza o in un array.

+0

Mi piace molto questa idea. Non mi era passato per la testa. Perché rimani tendono a stare lontano dai tag? –

+1

I tag non sono univoci. In realtà sono stato un po 'così: una tableviewcell che entra in modalità di modifica aggiunge un po' di sottoview che hanno identificativi di tag, sono entrati in collisione con quelli che ho scelto. E 'stata una divertente notte di debugging. La ricerca di un albero subview per i tag è lenta, specialmente se l'albero ha molti nodi. Nessuno di questi problemi si applica solo alla memorizzazione dei puntatori dell'oggetto! – jsd

2

Basta fare riferimento a UITableViews in base al nome della proprietà.

[self.thisTableView reloadData]; 
[self.thatTableView reloadData]; 

Nessun tag necessario!

È inoltre possibile utilizzare i nomi di proprietà per se il check-in UITableViewDataSource e metodi UITableViewDelegate

if(tableView == self.thisTableView){ 
    [tableView reloadData]; 
} 
+1

Cose come 'self.thisTableView' sono più spesso chiamate * properties * o * instance variables *. –

+0

@MarcusAdams - Grazie, hai ragione. Modificherò per chiarire. – hgwhittle

1

1.

tablesArray = [NSMutableArray alloc] init]; 

Fai tablesArray a livello globale. Quindi aggiungere ogni istanza tableView's.

[tablesArray addObject:tbl1]; 
[tablesArray addObject:tbl2]; 

Ora puoi ottenerli in modo semplice.

UITableView *tbl1 = (UITableView *)[tablesArray objectAtIndex:0]; 
[tbl1 reloadData]; 

2.

È possibile creare per ogni @propertytableView e possibile confrontare direttamente loro.

3.

Come si sta chiedendo informazioni su tag in modo sì, è possibile utilizzare i tag troppo.

[tableView1 setTag:1]; 
[self.view addSubview:tableView1]; 
// how to get 
UITableView *tableView1 = (UITableView *)[self.view viewWithTag:1]; 
Problemi correlati