2011-04-12 13 views

Respuesta

0

No creo que pueda o deba hacerlo. Deberá determinar desde indexPath qué datos va a mostrar en la celda correspondiente y así calcular la altura necesaria de la celda.

Así que tendrá que escribir un código para pasar de indexPath a los datos correctos en su modelo de datos.

+1

esto está mal, puede enviar 'tableView: cellForRowWithIndexPath' en este caso. @user ... solo lo está enviando al objeto equivocado. – XJones

26

Llamar a sí mismo (el delegado) en lugar de a la mesa misma.

id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; 
+2

si su cellForRowAtIndexPath usa heightForRowAtIndexPath, entonces siempre habrá recursión infinita. Si es así, tendrás que diseñar esto de manera diferente. – NWCoder

+4

No es una forma recomendada de hacerlo. El heightForRowAtIndexPath se llama antes de cellForRowAtIndexPath por una razón, debe poder calcular la altura en función de los datos que tiene. Tampoco se recomienda utilizar heightForRowAtIndexPath a menos que realmente necesite alturas diferentes para las celdas, ya que es mucho más lento a medida que aumenta el tamaño del conjunto de datos. – Joe

+4

@Joe: semi-desacuerdo. Si puede calcular fácilmente la altura sin necesidad de la celda, entonces está bien. Existen casos legítimos en los que necesita crear una instancia de la celda para saber su altura. Tengo muchas clases de celdas personalizadas que son lo suficientemente complejas como para calcular la altura sin disponer las subvistas. Algunos de los ejemplos de Apple hacen esto también. – XJones

-4
uitableviewcell *ce=[self.view viewwithtag:indexPath.row]; 

devuelve el objeto de celda.

+0

Esto solo funcionaría si las celdas se crean con esta etiqueta. También tenga en cuenta que esto puede ser problemático con las celdas reutilizadas, ya que pueden ser eliminadas cuando lo busque. – NWCoder

2

Use: func dequeueReusableCellWithIdentifier(identifier: String) -> AnyObject? de UITableView.
No utilice: func dequeueReusableCellWithIdentifier(identifier: String, forIndexPath indexPath: NSIndexPath) -> AnyObject
Razón Posible: heightForRowAtIndexPath es llamado antes cellForRowAtIndexPath y este método utiliza la ruta de índice para realizar una configuración adicional en base a la posición de la celda en la vista de tabla. Pero dado que todavía no hay células, creo que va a un ciclo infinito.

Cuestiones relacionadas