2010-01-18 18 views
8

Qualcuno sa un modo semplice per gestire più TableViews in una sola viewController? Ecco come ho fatto finora:Come gestire 2 tableviews in 1 viewController?

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
if(tableView == self.tableView1) 
return 1; 
else if(tableView == self.tableView2) 
return 2; 
} 

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
if(tableView == self.tableView1) 
return @"bla"; 
else if(tableView == self.tableView2) 
return @"blabla"; 
} 

-(NSString *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if(tableView == self.tableView1) 
... 
else if(tableView == self.tableView2) 
... 
} 

trovo davvero fastidioso che devo usare un'istruzione if/else per OGNI SINGOLO metodo delegato. Inoltre, è davvero difficile da leggere quando ci sono molte visualizzazioni di tabelle. Inoltre, ho lo stesso problema con NSURLConnection, ecc ... Non appena ho diversi oggetti che rispondono allo stesso protocollo di delega, le cose si complicano.

Qual è il modo migliore per semplificare le cose? Grazie

risposta

6

È possibile utilizzare i selettori e un tipo di identificatore per le viste tabella (il tag UIView, ad esempio). Qualcosa di simile a questo:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    return [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"tableView%d:titleForHeaderInSection:", tableView.tag])]; 
} 

Naturalmente sarà necessario disporre di un metodo per ognuno dei vostri punti di vista della tabella. Supponiamo che i tuoi due tavoli abbiano i tag 100 e 101, avrai quindi tableView100:titleForHeaderInSection e tableView101:titleForHeaderInSection.

+0

Questo è abbastanza conveniente! Grazie. – nmondollot

6

Un metodo che ho spesso utilizzato è quello di disporre effettivamente dei delegati e dell'origine dati per i due oggetti UITableView. In questo modo, il tuo controller di visualizzazione non deve spostarsi avanti e indietro e il tuo codice è nel complesso più pulito e semplice.

+0

Questo ha senso. Lo farò la prossima volta che devo gestire diversi oggetti deleganti. Grazie. – nmondollot

Problemi correlati