tutorials que apple ios ios5 uitableview storyboard

ios - apple - que es el storyboard xcode



¿Cómo inicializar una celda de tabla de estilo prototipo personalizada en los storyboards iOS 5? (5)

Estoy convirtiendo a iOS 5 y guiones gráficos. Cuando tengo una vista de tabla con el estilo de celda predeterminado, todo funciona bien.

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

He visto ejemplos donde se elimina el bloque "if (cell == nil)". Sin embargo, si lo saco, mi aplicación se bloquea con el mensaje: "UITableView dataSource debe devolver una celda de tableView: cellForRowAtIndexPath:". Esto no es un problema porque funciona como se muestra arriba.

Mi problema es que quiero usar un estilo personalizado para la celda y, por lo tanto, no puedo usar initWithStyle. ¿Cómo inicializo una celda personalizada que he diseñado en el guión gráfico?

La vieja aplicación pre-5 tenía una punta y una clase que usaba algo como esto, pero ahora estoy usando el guión gráfico.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { MyCustomTableCell *cell = (MyCustomTableCell *) [tableView dequeueReusableCellWithIdentifier:@"MyCustomIdentifier"]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomTableCell" owner:self options:nil]; cell = (MyCustomTableCell *) [nib objectAtIndex:0]; } return cell; }


Creo que este funciona muy bien. Estuve tratando de entenderlo por algún tiempo y gracias, funcionó ... bueno, yo estaba haciendo esto, cuando trataba de asignar una celda que estaba asignando usando la clase celular general en lugar de la que había creado

entonces yo estaba haciendo esto, entonces esa es la razón por la cual no funcionó

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

entonces, en lugar de UITableViewCell, asigna la celda a tu clase, bueno con el ejemplo anterior "CustomCell"

Gracias de nuevo


De esta manera

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


Esto funcionó perfecto para mí (Xcode 4.5.2 e iOS 6.0):

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; if( cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; } UILabel *title = (UILabel*) [cell viewWithTag:1000]; UILabel *summary = (UILabel*) [cell viewWithTag:1001]; [title setText:[ tableMainTitle objectAtIndex:indexPath.row]]; [summary setText:[ tableSubTitle objectAtIndex:indexPath.row]]; return cell; }

Importante: no olvide configurar el delegado y el origen de datos.


Si carga su controlador de vista que contiene la vista de tabla usando:

MyViewController *myViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

Luego dentro de cellForRowAtIndexPath solo necesitas una línea:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifierFromStoryboard"];

dequeueReusableCellWithIdentifier creará una instancia de una celda si no existe ninguna.


static NSString *identifier=@"SearchUser"; SearchUserCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier]; if (cell==nil) { cell=[[SearchUserCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } return cell;