2009-11-21 12 views
17

He creado una vista de tabla en una aplicación de iPhone utilizando el Interface Builder (IB). El estilo de mi mesa está configurado como Agrupado, y se muestra de esa manera en IB. Sin embargo, cada vez que construyo y corro, aparece como un estilo simple en el simulador.La configuración de estilo agrupado no surte efecto desde IB, UITableView

Tengo otra vista configurada para Agrupar y no tengo este problema. ¿Alguien que haya tenido el mismo problema?

El resto de la vista no se crea mediante programación, por lo que me gustaría evitar hacer eso para esta vista. Debe haber algo que me falta.

El único método tableView que estoy haciendo mucho de nada en es el método manejador de células donde estoy incorpora una caja de texto en campos de selección:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
} 

if (indexPath.section == 0) { 
    if (indexPath.row == 0) { 
     cell.textLabel.text = @"Title"; 

     UITextField *listTitleTextField = [ [ UITextField alloc ] initWithFrame: CGRectMake(150, 10, 145, 38) ]; 
     listTitleTextField.adjustsFontSizeToFitWidth = YES; 
     listTitleTextField.textColor = [UIColor blackColor]; 
     listTitleTextField.font = [UIFont systemFontOfSize:17.0]; 
     listTitleTextField.placeholder = @"Your Title"; 
     listTitleTextField.backgroundColor = [UIColor whiteColor]; 
     listTitleTextField.autocorrectionType = UITextAutocorrectionTypeNo;  // no auto correction support 
     listTitleTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; // no auto capitalization support 
     listTitleTextField.textAlignment = UITextAlignmentRight; 
     listTitleTextField.keyboardType = UIKeyboardTypeDefault; // use the default type input method (entire keyboard) 
     listTitleTextField.returnKeyType = UIReturnKeyDone; 
     listTitleTextField.tag = 0; 
     listTitleTextField.delegate = self; 

     listTitleTextField.clearButtonMode = UITextFieldViewModeUnlessEditing; // no clear 'x' button to the right 
     if (self.wishList.listTitle == nil || [self.wishList.listTitle length] == 0) { 
      listTitleTextField.text = @""; 
     } 
     else { 
      listTitleTextField.text = self.wishList.listTitle; 
     } 
     [listTitleTextField setEnabled: YES ]; 
     [cell addSubview: listTitleTextField ]; 
     [listTitleTextField release]; 
    } 
    else if (indexPath.row == 1) { 
     cell.detailTextLabel.text = @"Pick an Icon"; 
     cell.textLabel.text = @"List Icon"; 
    } 
} 
else { 
    cell.textLabel.text = @"Add Wish"; 
} 

return cell; 

}

+0

Publique su código? –

+0

No es realmente ningún código programático para publicar el problema, estableciendo Style en "agrupado" en IB, luego simplemente haciendo tableview I/F métodos para establecer nombres de sección y modificar la celda de la tabla según sea necesario para mostrar los valores. –

+0

¿Está utilizando esto junto con un UITabBarController? – JamesSugrue

Respuesta

8

Aún no estoy seguro de por qué la configuración de estilo "agrupado" no está teniendo efecto desde el Creador de interfaces. Sin embargo, puede configurar manualmente antes de crear aquí la vista:

- (id)initWithStyle:(UITableViewStyle)style { 
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
    style = UITableViewStyleGrouped; 
    if (self = [super initWithStyle:style]) { 
    } 
    return self; 
} 
+0

Esta versión de código funciona, pero la respuesta de Joe anterior funciona solo para la versión de IB. – earnshavian

+0

Mismo código, lo he implementado pero no funciona en el iPhone 5, ¿Tiene alguna sugerencia? – Raj

0

¿La vista de tabla responden a los eventos y se llenan con los datos como era de esperar? - Parece que los enchufes no están conectados correctamente a mí. Verificaría dos veces la fuente de datos y delegaría las conexiones desde la vista de tabla al controlador. Puede valer la pena eliminar la vista de tabla de IB y volver a agregarla y volver a conectarla también. He visto a IB actuar un poco meticuloso en este extraño caso.

+0

Lo eliminó y creó una nueva vista de tabla. A continuación, adjunte la fuente de datos y delegue en el propietario del archivo. También adjuntó la vista en el propietario del archivo a la tabla. El problema vuelve a ser lo mismo. –

13

Tuvimos esto y nos difuminados por espacio de una hora. Finalmente, descubrimos que no habíamos establecido la propiedad NIB Name del controlador de vista dentro del controlador de navegación (¡dentro del controlador de la barra de pestañas, en nuestro XIB principal!). Sin ese conjunto, todos los cambios que hicimos en el archivo XIB de nuestra vista de tabla fueron completamente ignorados. Sin embargo, el código funcionó bien de lo contrario, y había muy poco para señalar nuestro error.

Apuesto a que algo similar está sucediendo en su caso. Asegúrate de que tu XIB (donde configuras el estilo de la mesa) se esté usando realmente.

+0

Puedo confirmar que esto funciona. Establezca el nombre de NIB en el nombre de su archivo xib sin la extensión .xib. Esto debe marcarse como la respuesta para una solución única de IB. – earnshavian

9

¿Cuál es la clase base de su controlador? Tuve el mismo problema, hasta que cambié mi controlador de la subclasificación de un UITableViewController a solo un estándar UIViewController. Parecería que está utilizando un UITableViewController, tiene su propio UITableView incorporado e ignora el que usted especifica en IB.

+0

¡Eso funcionó en mi caso! ¡Gracias! –

+0

Me ayudó también esto - ¡gracias! –

+0

OMG muchas gracias. –

2

Debe especificar el nombre de la punta al crear la clase o de lo contrario no buscará la punta predeterminada nombrada igual que su clase. Por algún motivo, Apple decidió incluir su propia vista de tabla como valor predeterminado.

Por ejemplo, si su nombre de la clase es "Configuración":

settingsController = [[Settings alloc] initWithNibName:@"Settings" bundle: nil];

4

Al inicializar el punto de vista simplemente hacer lo siguiente:

CustomTableViewController *viewController = [[CustomTableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

En lugar de simplemente init. Esto me lo resuelve.

Cuestiones relacionadas