TableView with multiple prototype cells

帅比萌擦擦* 提交于 2019-12-03 05:55:28

问题


I had a simple question regarding a table view with 3 different kinds of prototype cells. The first two occur just once while the third occurs 4 times. Now what I'm confused about is how to specify in my cellforRowatindexpath which cell prototype to use for which row. So, I want something like for row 0, use prototype 1, for row 1, use prototype 2, for rows 3,4,5 and 6 use prototype 3. What's the best way to do this? Do i give each prototype an identifier and then use dequeueReusableCellWithIdentifier:CellIdentifier ? Can you'll provide some sample code?

EDIT:

Still not working. This is the code I have at the moment. ( I only have one case for the switch statment because I just want to test and see if the cell is being generated in the first row or not, but currently table view is blank)

- (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 is my identifier for a cell prototype that I created. I


回答1:


If you are using three prototype then use three identifiers. Because only one identifier will cause problem. And you will get wrong result. So code like this.

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

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

else{
 // Create all others
}

You can use switch case also here for best performance.




回答2:


- (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:


Here i wrote code like:

#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;
 }


来源:https://stackoverflow.com/questions/14758756/tableview-with-multiple-prototype-cells

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!