with uitableviewcell tutorial tableviewcontroller multiple example custom ios objective-c uitableview

ios - uitableviewcell - uitableview with multiple custom cells swift



UITableView con dos celdas personalizadas(identificadores mĂșltiples) (3)

Además de las respuestas proporcionadas, quiero hacer hincapié en el identificador de celda para cada celda personalizada diferente debe ser diferente también .

Por ejemplo, cellA personalizada con el identificador "Cell" y cellB personalizada con el identificador "Cell2" .

Estoy tratando de poner una celda como un espacio entre cada celda, que se ocultará al establecer alfa = 0. En mi tabla, las celdas espaciales serán para las filas que son impares.

Tenga en cuenta que la altura real de la celda es 85, pero la altura de la celda oculta (es decir, el espacio entre las celdas) es 20.

El problema es que la altura de la celda espacial es 85, pero no 20, no sé por qué. Tal vez la celda no está cargada correctamente.

Cell aquí es UITableViewCell , la celda real, con el identificador ''Celda''.

Cell2 es el espacio con el identificador ''Espacio''.

Cada clase anterior tiene su propia clase UITableViewCell y los archivos XIB también se asignan a cada uno de ellos. El identificador también se establece en el IB para cada Xib.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier1 = @"Cell"; static NSString *CellIdentifier2 = @"Space"; Cell *cell = (Cell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1]; if(!cell) { NSArray *ar = [[NSBundle mainBundle] loadNibNamed:@"CellView" owner:nil options:nil]; for (id obj in ar) { if ([obj isKindOfClass:[Cell class]]) { cell = (Cell *)obj; break; } } } if (indexPath.row % 2 == 1) { Cell2 *cell2 = (Cell2 *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2]; if (!cell2) { NSArray *ar = [[NSBundle mainBundle] loadNibNamed:@"Cell2" owner:nil options:nil]; for(id obj in ar) { if([obj isKindOfClass:[Cell2 class]]) { cell2 = (Cell2 *)obj; break; } } // Method 1 cell2 = [[Cell2 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier2]; // Method 2 //cell2 = [[Cell2 alloc] init]; // Method 3 //cell2 = (Cell2 *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2]; [cell2.contentView setAlpha:0]; // prevent selection and other stuff [cell2 setUserInteractionEnabled:NO]; } return cell2; } else { // Configure the actual cell } return cell;

}


* He cambiado el nombre de algunos de tus nombres de NIB / Clase para una mejor comprensión. *

Primero, debe registrar el NIB de cada célula:

- (void)viewDidLoad{ [super viewDidLoad]; static NSString *CellIdentifier1 = @"ContentCell"; static NSString *CellIdentifier2 = @"SpaceCell"; UINib *nib = [UINib nibWithNibName:@"CellViewNIBName" bundle:nil]; [self.tableView registerNib:nib forCellReuseIdentifier:CellIdentifier1]; nib = [UINib nibWithNibName:@"CellSpaceNIBName" bundle:nil]; [self.tableView registerNib:nib forCellReuseIdentifier:CellIdentifier2]; self.contentView.hidden = YES; [self loadData]; }

Como tiene los NIB registrados, dequeueReusableCellWithIdentifier: siempre devolverá una celda:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier1 = @"ContentCell"; static NSString *CellIdentifier2 = @"SpaceCell"; // Space Cell if (indexPath.row % 2 == 1) { CellSpace *cell = (CellSpace *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2]; return cell; } // Content cell else { CellView *cell = (CellView *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1]; // Configure cell return cell; } }

Por último, pero no menos importante, asegúrese de implementar el siguiente método delegado:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // Space cell''s height if (indexPath.row % 2 == 1) { return 20.0f; } // Content cell''s height else { return 80.0f; } }


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *returncell; static NSString *cellIdentifier ; if(indexPath.section == 0) { cellIdentifier = @"cell1"; } else if (indexPath.section == 1) { cellIdentifier = @"cell2"; } UITableViewCell *myCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; MapTableViewCell *myCustomCell = (MapTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if(indexPath.section == 0) { if(myCell == nil) { myCell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; getLocationBtn = [UIButton buttonWithType:UIButtonTypeCustom]; getLocationBtn.frame = CGRectMake(myCell.frame.origin.x,myCell.frame.origin.y+5 , 200, 30); [getLocationBtn setTitle:@"your button title" forState:UIControlStateNormal]; [getLocationBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; [getLocationBtn addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside]; } [myCell.contentView addSubview:getLocationBtn]; returncell = myCell; } else if (indexPath.section == 1) { if (myCustomCell == nil) { myCustomCell = [[MapTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } myCustomCell.nearbyLocation.text = @"demo Text"; returncell = myCustomCell; } return returncell; }

// mycustom tablviewcell

importar "MapTableViewCell.h"

@implementation MapTableViewCell @synthesize nearbyLocation; -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if(self) { self.backgroundColor = [UIColor groupTableViewBackgroundColor]; nearbyLocation = [[UILabel alloc]initWithFrame:CGRectMake(10, 5, 200, 30)]; [self addSubview:nearbyLocation]; } return self; } @end

La mejor forma de usar la cantidad de celdas personalizadas con la celda predeterminada