2011-10-23 22 views
11

Querer crear un menú estático (IOS 5) y tratar de crear celdas personalizadas dentro del guión gráfico para luego cargarlas en la vista de tabla agrupada.Crear UITableViewCell personalizado dentro de un Storyboard

He creado la salida

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

La clase ViewController se establece en el TableViewController adecuada y he conectado el celular de encargo a esta salida.

También tengo el delegado y la fuente de datos configurados.

Tengo

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return self.labelCell; 
} 

Estoy seguro de que hay un montón de malo en esto, pero sólo estoy tratando de mostrar una célula e ir de allí. No parece haber ningún ejemplo de hacer celdas personalizadas dentro del IB a través del guión gráfico. Todavía puedo usar la antigua forma de crear un archivo xib y cargarlo en el paquete principal, pero solo quiero estar al día, supongo.

pero con lo que tengo arriba me cuelga cuando cargo este controlador de vista. SIGABRT

Respuesta

13

Si configuró su UITableView para usar 'Células estáticas' en el guión gráfico, no necesita implementar ninguno de los métodos UITableViewDataSource y puede modificar la celda directamente en el Interface Builder. Para una celda de etiqueta única, seleccione la celda y cambie su tipo a 'Básico'. Ahora puede editar la celda como lo haría con cualquier otro objeto de vista.

+1

Sip. Eso es todo.No estoy seguro de por qué no encontré ninguna guía que te dijera que hicieras esto. Lo hace mucho más fácil. – Doug

+1

Como pregunta aleatoria, ¿usar células estáticas implica que tienes exactamente la cantidad de células que especifiques en IB? Como no tiene que implementar los métodos de fuente de datos, supongo que no puede cambiar los datos en su vista de tabla y es por eso que lo llamaron estático, ¿no? – Warkst

+0

@Warkst - exactamente. De hecho, debe eliminar las implementaciones de stub de los métodos de origen de datos. – jrturton

27

Esto es lo que aprendí sobre cómo obtener celdas para su tabla cuando se usa el guión gráfico. Cuando arrastra una UITableView a su vista, viene con una celda prototipo ya configurada como subvista. Para usar esta celda de prototipo, establezca un identificador de reutilización único en el inspector de atributos y luego use el mismo identificador para quitar la cola de la celda en su método cellForRowAtIndexPath :. Dejo fuera el código para crear una celda desde cero si la llamada a la cola devuelve nil; No creo que pueda suceder Así que simplemente dequeue la celda, configúrela con los métodos UITableViewCell usuales y devuélvala.

Pero también puede crear subclases personalizadas de UITableViewCell. Simplemente configure el nombre de la clase en el inspector de identidad de clase del guión gráfico y arrastre los elementos que desee de la paleta de Objetos a su celda. Luego, cree las propiedades de IBOutlet para ellos en los archivos de código de su subclase y conéctelos a la celda en el guión gráfico de la manera habitual. ¡Esto es mucho mejor que tener que hacerlo todo en código!

Y, por último, puede tener más de un tipo de celda en su tabla. Simplemente arrastre objetos UITableViewCell desde la paleta a la tabla, y proporcione a cada uno un identificador de reutilización único en el inspector de atributos. En su método cellForRowAtIndexPath: elija el tipo de cada celda y puede tener una vista de tabla muy flexible.

+1

Esto es todo cierto, pero la pregunta es acerca de las vistas de tablas estáticas, que no usan prototipos. – jrturton

+0

Tengo un nuevo escenario (duda). Si tengo un 'UITableView' con una celda personalizada que contiene los botones' + ',' -' y 'UITextField'. toda la configuración se realiza de acuerdo con su párrafo n. ° 2, pero ahora, si quiero evitar que se reutilicen mis células, ¿hay alguna forma de hacerlo? Debería incluso hacer eso? (quiero la funcionalidad de agregar más de un ID de correo electrónico) – thesummersign

+0

@jrturton Ah, pero algunos llegan aquí desde una búsqueda en Google, sin darse cuenta de la parte "estática". El título es un poco engañoso. Entonces * esta * respuesta en realidad era lo que * I * estaba buscando. –

4

This tutorial fue útil para mí. Puede hacer referencia a cualquier objeto que necesite a través de la etiqueta.

En el arrastre Storyboard en un UIImageView o UILabel etc., y define la etiqueta como 100 (lo que quieras) a continuación, en su - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath utilizar la etiqueta para hacer referencia a ella.

Aquí es el código de ejemplo en el tutorial, sólo recuerda a configurar las etiquetas en el guión gráfico:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

// Configure the cell... 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

// Display recipe in the table cell 
Recipe *recipe = [recipes objectAtIndex:indexPath.row]; 
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
recipeImageView.image = [UIImage imageNamed:recipe.imageFile]; 

UILabel *recipeNameLabel = (UILabel *)[cell viewWithTag:101]; 
recipeNameLabel.text = recipe.name; 

UILabel *recipeDetailLabel = (UILabel *)[cell viewWithTag:102]; 
recipeDetailLabel.text = recipe.detail; 

return cell; 
} 
Cuestiones relacionadas