web-dev-qa-db-fra.com

TableView avec plusieurs cellules prototypes

J'avais une question simple concernant une vue sous forme de tableau avec 3 types différents de cellules prototypes. Les deux premiers surviennent une seule fois tandis que le troisième se produit 4 fois. Maintenant, ce que je ne comprends pas, c'est comment spécifier dans mon cellforRowatindexpath quel prototype de cellule utiliser pour quelle ligne. Donc, je veux quelque chose comme pour la rangée 0, utilisez le prototype 1, pour la rangée 1, utilisez le prototype 2, pour les rangées 3, 4, 5 et 6, utilisez le prototype 3. Quelle est la meilleure façon de faire cela? Dois-je attribuer un identifiant à chaque prototype, puis utiliser dequeueReusableCellWithIdentifier: CellIdentifier? Pouvez-vous fournir un exemple de code?

MODIFIER:

Ne fonctionne toujours pas. C'est le code que j'ai pour le moment. (Je n'ai qu'un seul cas pour l'état du commutateur parce que je veux juste tester et voir si la cellule est générée dans la première ligne ou non, mais la vue de tableau est actuellement vide)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     switch(indexPath.row)
{          
 case 0: {static NSString *CellIdentifier = @"ACell";
                   UITableViewCell *cell = [tableView
                                           dequeueReusableCellWithIdentifier:@"ACell"];
  if(cell==nil) {
    cell=[[UITableViewCell alloc]
          initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"ACell"];

                        }
  return cell;
  break;
    }
  }
}

Acell est mon identifiant pour un prototype de cellule que j'ai créé. je

14
David West

Si vous utilisez trois prototypes, utilisez trois identificateurs. Parce qu'un seul identifiant posera problème. Et vous obtiendrez un résultat erroné. Donc, code comme ça.

if(indexPath.row==0){
 // Create first cell
}

if(indexPath.row==1){
 // Create second cell
}

else{
 // Create all others
}

Vous pouvez également utiliser le boîtier de commutation ici pour optimiser les performances.

16
Best Coder
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (cell.tag == 0) 
   {
    return array1.count;
   }
   else(cell.tag == 1)
   {
    return array2.count;
   }    
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *cellIdentifier;

 NSString *membershipType = [membershipTypeArray objectAtIndex:indexPath.row];

 if ([membershipType isEqualToString:@"silver"]||[membershipType isEqualToString:@"gold"])
 {
     cellIdentifier = @"cell";
 }
 else if ([membershipType isEqualToString:@"platinum"])
 {
     cellIdentifier = @"premiumCustomCell";
     cell.customCellImageView.image = [cellImageArray objectAtIndex:indexPath.row];
 }

 cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

 if (!cell) {
     cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
 }
 cell.selectionStyle = UITableViewCellSelectionStyleNone;
 cell.headingLabel.text = [titleArray objectAtIndex:indexPath.row]; 
}
3
Ashish Pisey

Ici j'ai écrit le code comme:

#pragma mark == Tableview Datasource

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  return 2;
 }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSInteger nRows = 0;
switch (section) {
    case 0:
        nRows = shipData.count;
        break;
    case 1:
        nRows = dataArray1.count;
        break;
    default:
        break;
}
return nRows;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *cellIdentifier = @"cellIdentifier1";
NSString *cellIdentifier1 = @"cellIdentifier2";
SingleShippingDetailsCell *cell;
switch (indexPath.section) {
    case 0:
        cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
        //Load data in this prototype cell
        break;
    case 1:
        cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier1];
        //Load data in this prototype cell
        break;
    default:
        break;
}
return cell;
 }
1
Mannam Brahmam