2009-09-12 7 views
10

Je dois avoir deux UITableViews sur un UIView. Je peux le faire fonctionner avec un, voici le code:Plusieurs UITableViews sur un UIView

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 

    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [contentOne count]; // sets row count to number of items in array 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    NSString *firstValue = [[NSString alloc] initWithFormat: @"Row %i% %", indexPath.row+1 ]; 
    NSString *secondValue = [contentOne objectAtIndex:indexPath.row]; 

    NSString *cellValue = [firstValue stringByAppendingString: secondValue]; // appends two strings 

    [cell.textLabel setText:cellValue]; 



    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

} 

J'ai essayé plusieurs méthodes différentes. N'importe qui? Si je pourrais nommer chaque UITableView un nom différent qui devrait le faire mais il ne me laissera pas éditer tableView à n'importe quoi d'autre sans plantage.

+0

Question Duplicate Essayez la solution donnée dans: http://stackoverflow.com/a/11789681/846372 – Soniya

Répondre

28

si vous avez besoin d'une certaine façon de dire les deux tableView s en dehors - vous pouvez soit définir la propriété « tag » à des valeurs différentes, ou avoir une propriété sur votre contrôleur de vue que les points à chaque vue

@property (nonatomic, retain) IBOutlet UITableView *tableView1; 
@property (nonatomic, retain) IBOutlet UITableView *tableView2; 

crochet puis ceux-ci à chaque vue dans le constructeur d'interface ...

alors, selon vous, les méthodes de commande que vous pouvez faire

(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    if (tableView == self.tableView1) { 
     return 37; 
    } else if (tableView == self.tableView2) { 
     return 19; 
    } else { 
     // shouldn't get here, use an assert to check for this if you'd like 
    } 
} 
+0

J'ai essayé - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView { \t if (tableView == self.tableOne) { return 1; \t} \t sinon if (tableView == self.tableTwo) { \t return 1; \t} \t \t else { \t \t return 1; \t \t}} Il me donne l'erreur de déclaration locale tableView cache exemple –

+0

avez-vous une variable de classe nommée tableView? Votre classe est-elle dérivée de UITableViewController, ou autre chose? –

+0

J'ai tout fait à l'intérieur de l'UIView. Je n'avais pas de contrôleur séparé pour UITableView. J'ai juste essayé des sections et c'est tellement plus facile qu'essayant de faire deux UITableViews séparés. J'ai été capable de séparer mes deux tableaux en sections séparées. Merci pour l'aide. Je ne comprends pas. –

14

Probablement la meilleure façon de i Mplementing ceci est d'avoir deux classes de délégué et de source de données, une pour chaque vue de table. Cela réduirait le nombre d'occurrences de if (tableview == tableview1) dans le code du contrôleur de vue.

+1

Pourriez-vous fournir un exemple de mise en œuvre pour cela s'il vous plaît? – dombesz

+1

mais cela multiplierait le nombre de méthodes de délégué et de source de données à implémenter. c'est un scénario de donner et prendre :) –

Questions connexes