2010-01-18 6 views
8

Kennt jemand eine einfache Möglichkeit, mehrere TableViews in einem ViewController zu verwalten? Hier ist, wie ich habe es bisher tun:Wie 2 Tabellenansichten in 1 ViewController verwalten?

-(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) 
... 
} 

Ich finde es wirklich ärgerlich, dass ich eine if/else-Anweisung für jeden einzelnen Delegierten Methode zu verwenden. Außerdem ist es sehr schwer zu lesen, wenn es viele TableViews gibt. Außerdem habe ich das gleiche Problem mit NSURLConnection, etc ... Sobald ich mehrere Objekte habe, die auf das gleiche Delegiertenprotokoll reagieren, werden die Dinge unordentlich.

Was ist der beste Weg, um die Dinge zu vereinfachen? Dank

Antwort

6

Sie könnten Selektoren und eine Art von Bezeichner für die Tabellenansichten (z. B. das UIView Tag) verwenden. Etwas wie dieses:

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

Natürlich müssen Sie eine Methode für jede Ihrer Tabellenansichten haben. Angenommen, Ihre beiden Tabellen haben die Tags 100 und 101, dann haben Sie tableView100:titleForHeaderInSection und tableView101:titleForHeaderInSection.

+0

Das ist sehr praktisch! Vielen Dank. – nmondollot

6

Eine Methode, die ich oft verwendet habe, ist, die Delegierten und die Datenquelle für die zwei verschiedenen Objekte zu haben. Auf diese Weise muss Ihr View-Controller nicht vor und zurück wechseln und Ihr Code ist insgesamt sauberer und einfacher.

+0

Das macht Sinn. Das nächste Mal muss ich mehrere Delegierungsobjekte behandeln. Vielen Dank. – nmondollot

Verwandte Themen