¿Cómo puedo usar UITableViewCell y UITableView personalizados en la misma xib

¿Quiero usar un UITableviewCell personalizado con UITableView en el mismo xib sin crear una class UITableViewCell?

Como puede ver a continuación, establezco el identificador para UITableViewCell y lo uso así:

UITableView y UITableViewCell en la misma xib

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CustomIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } } 

¿Pero no funciona?

Agregue una propiedad UITableViewCell * customCell a su controller de vista (por ejemplo, su file ShowUsers.h) …

 @property (nonatomic, strong) IBOutlet UITableViewCell *customCell; 

y conéctelo a la celda personalizada en su xib. Luego use el siguiente código en cellForRow (por ejemplo, su file ShowUsers.m):

 if (cell == nil) { [[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self options:nil]; cell = self.customCell; self.customCell = nil; } 

Sí, puedes hacer como el siguiente código

Bajo ViewDidLoad o ViewWillAppear

 label1Array=[NSMutableArray arrayWithObjects:@"A",@"B",nil]; label2Array=[NSMutableArray arrayWithObjects:@"C",@"D",nil]; label3Array=[NSMutableArray arrayWithObjects:@"E",@"F",nil]; 

UITableViewDelegate

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"aCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; UILabel *label1=[[UILabel alloc]init]; label1.frame=CGRectMake(0,0,40,40); label1.text=[label1Array objectAtIndex:indexPath.row]; ................ [cell.contentView addSubView: label1]; UILabel *label2=[[UILabel alloc]init]; label2.frame=CGRectMake(50,0,40,40); label2.text=[label2Array objectAtIndex:indexPath.row]; [cell.contentView addSubView: label2]; UILabel *label3=[[UILabel alloc]init]; label3.frame=CGRectMake(100,0,40,40); label3.text=[label3Array objectAtIndex:indexPath.row]; [cell.contentView addSubView: label3]; } 

Espero que esto ayude !!!

Mira … puedes hacer así. Aquí está agregando dos UITableViewCell en un TableView usando XIB.

En el file Class.h:

Declare una matriz mutable para el número de celdas.

  { NSMutableArray * sectionRows; } @property (nonatomic,retain) IBOutlet UITableViewCell *addTvc1; @property (nonatomic,retain) IBOutlet UITableViewCell *addTvc2; 

En Class.m: –

  @synthesize addTvc1, addTvc2; - (void)viewDidLoad { [super viewDidLoad]; sectionRows = [[NSMutableArray alloc] init]; [sectionRows addObject:[[NSMutableArray alloc] initWithObjects:addTvc1, nil]]; [sectionRows addObject:[[NSMutableArray alloc] initWithObjects:addTvc2, nil]]; } 

En el método UITableViewDelegate:

Agrega esto –

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [sectionRows count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section { return [[sectionRows objectAtIndex:section] count]; } - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { return [[sectionRows objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; } 

Junto con el código, en la class XIB suelte y arrastre dos UITableViewCell que deberían estar fuera de la vista y agregue esas celdas con Propietario de files. Funcionará perfectamente. Aquí no es necesario crear una class UITableViewCell personalizada aparte.