2012-06-09 12 views
12

Estoy tratando de descubrir cómo tener algunas celdas estáticas además de celdas dinámicas (creo) pero cuando comienzo una nueva aplicación Master-Detail y cambio los prototipos dinámicos predeterminados a Células estáticas, se bloquea.confusión sobre celdas estáticas frente a celdas dinámicas

Creo que, como todavía soy nuevo en esto, no entiendo cómo están conectados todos los componentes (vistas de tabla, celdas, delegados). Después de cambiar a Static Cells hice tres células pero no aparecen. La aplicación simplemente falla.

Puedo incluir código pero, básicamente, creo un nuevo Master-Detail, cambio a Static Cells, cambio el nombre de tres celdas y se bloquea (en el bucle principal).

Gracias por delante para todo.

+0

¿Puedes compartir el seguimiento de la pila? – sosborn

Respuesta

45

Si entiendo su pregunta, esta es la explicación que busca:

Prototipo (reutilización):

Cuando se utiliza células dinámicos, se utiliza células Prototype. Eso significa que en IB o en su código, crea una instancia de UITableViewCell y le da un identificador (reuseIdentifier). El UITableView utiliza este prototipo para generar tantas celdas (filas) como necesite. UITableView crear (y usar memoria) tantas celdas como necesite para llenar la pantalla. Una vez algunas de estas células van fuera de la pantalla, UITableViewreutiliza ellos - recicla ellos.

Puede definir más de uno celular prototipo en un UITableView. La idea es que cada prototipo tenga un propósito diferente. Por ejemplo, define un prototipo de celda que tiene solo un gran UILabel y su propósito es usar texto estático. Usted define otro prototipo que tiene solo un UIImageView. Depende de su diseño y de cómo desea mostrar sus datos.

utilizar células de prototipo, en el IB, se utiliza dinámicos Prototipos células, y establecer un identifier. Entonces usted tiene que poner en práctica UITableViewDataSource métodos, tales como:

– tableView:numberOfRowsInSection: 
– tableView:cellForRowAtIndexPath: 

Estos métodos son métodos de delegado de UITableView.

Si no utiliza IB, debe crear células en – tableView:cellForRowAtIndexPath: método:

UITableViewCell * celular = [[UITableViewCell alloc] initWithStyle: (UITableViewCellStyle) reuseIdentifier estilo: (NSString *) reuseIdentifier];

estática:

La idea de las células estáticas es sólo la simplicidad. Puede usar las celdas de prototipo (por ejemplo, solo un prototipo) y alimentar en un NSArray estático, por ejemplo, como fuente de datos. Para tomar la tarea de implementar los métodos UITableViewDataSource, Apple introdujo celdas estáticas, donde solo usaría el guión gráfico y el IB. En IB, seleccione la vista de tabla y elija Células estáticas y escriba su texto o defina la imagen. No desea realizar ningún cambio dinámico a las celdas estáticas más tarde cuando la aplicación se está ejecutando porque no está destinado a hacerlo, y tendría que implementar muchos más métodos para que no valga la pena. Aunque no es demasiado trabajo obtener el indexPath de la fila seleccionada, pero la idea es si necesita enviar una nueva vista desde la selección de una celda estática, usaría segues, en lugar de implementar cualquier código.

Al usar celdas estáticas, no debe implementar el método UITableViewDataSource; de lo contrario, su aplicación falla, y viceversa, si no implementa los métodos UITableViewDataSource (necesarios) al usar celdas prototipo, su aplicación falla.

+0

Voy a ir a través de eso con un peine fino (¿lo escribiste para esto? ¿O lo encontraste en alguna parte?), Pero deshacerse de los métodos UITableViewDataSource hizo el truco (tuvo que agregar "numberOfRowsInSection". –

+2

Me alegro de funcionó. Lo hizo solo para usted! Aunque puede encontrar explicaciones más extensas por ahí. ¡Buena suerte! – Canopus

+0

Algo bueno que aprendí de todo esto es que hay una extensa documentación en la referencia de clase (Organizador - Documentación). La próxima vez ¡Leeré todos los documentos de referencia de clase aplicables antes de publicar! –

Cuestiones relacionadas