2012-08-27 9 views
43

Tengo un proyecto bastante grande (~ 20 escenas). Uno de los cuales es TableViewController con una clase UITableViewController personalizada. Le di a la celda un identificador de reutilización y le agregué una etiqueta. Cuando intento y Ctrl + arrastrar la etiqueta para el archivo de cabecera UITableViewController para crear una salida, me sale el siguiente error:Extraño error al agregar elementos al prototipo de celdas en el guión gráfico-IB

error: Illegal Configuration: Connection "tableInfoView" cannot have a prototype object as its destination.

¿Qué es esto? ¿Estoy pasando por alto algo obvio? ¿O necesito crear una clase de celda personalizada y arrastrar la salida a eso? Si es así, ¿cómo especifico los datos que se muestran de forma exclusiva para cada celda desde UITableViewController?

+10

No es posible conectar la etiqueta del prototipo a una toma de corriente en el controlador de vista de la tabla, ya que el controlador no es el propietario del prototipo ('UITableViewCell' es).Para los prototipos de celdas dinámicas, debe hacer algo como establecer una etiqueta en la celda y buscar la etiqueta con eso después de que quite la cola de la celda. –

+0

Acabo de descubrir eso: P ¡Gracias por su ayuda de todos modos! Escríbelo como respuesta y lo aceptaré. –

Respuesta

67

De hecho, no se puede hacer una salida de un prototipo de celda dinámica en el controlador de vista de delegado UITableView.

Tendrá que subclasificar UITableViewCell y luego atribuir esta clase a su prototipo.

Luego puede presionar Ctrl-Arrastrar desde la etiqueta hasta el archivo de encabezado de la subclase UITableViewCell.

Finalmente puede acceder a este punto de venta en el código de delegado después de haber importado el archivo de encabezado UITableViewCell en él.

Esto está documentado por Apple there en la sección "La técnica para el contenido de fila dinámica".

+0

¿Hay alguna manera de agrupar celdas? Estoy teniendo un momento difícil ... – user805981

+0

¿Qué quieres decir con "células agrupadas"? – dulgan

1

Me enfrenté al mismo problema pero más tarde resultó que fue solo un error tonto. erróneamente que arrastrar la etiqueta de célula a @interface

Esto podría ser su problema de mi regulador demasiado. solo revise una vez.

+0

No creo que el póster solicite una IBAction sino una salida para configurar el control. –

+0

@LeviRoberts No estoy hablando de IBActions aquí. – thesummersign

2

Tuve el mismo error. Solo para agregar una causa raíz más para futuros lectores:

En mi caso, copié un control (un Botón en este caso) de un prototipo de celda al siguiente y la acción todavía se refería a la celda vecina. Mi mesa tiene varias celdas de prototipos diferentes.

El hecho de que, en realidad, era una subclase adecuada de UITableViewCell que estaba conectada correctamente a la celda del prototipo, dificultaba realmente ver el error.

10

o usted podría dar la etiqueta de una etiqueta (por ejemplo, 100) y el uso de

myLabel = [myTableView viewForTag:100]; 

para obtener la etiqueta

-1

Establecer el identificador de reutilización derecho utilizado en el archivo .m en el Storyboard para la célula Prototipo . Tuve la misma situación y esto me ayudó

+0

mi8 sea estúpido, pero el error lo olvidaremos! – Wodjefer

-2

Después de hacer todas las cosas bien si el problema aún existe, simplemente eliminé todas las tomas y las volví a unir cuidadosamente y funcionó muy bien para mí.

1

Etiquete la etiqueta y puede acceder a la etiqueta desde cualquier lugar en el controlador de vista, como con viewWithTag en la vista de tabla.

UILabel *destinationLabel = (UILabel *)[self.tableView viewWithTag:1]; 


    destinationLabel.text = @"Label Destaination"; 
Cuestiones relacionadas