El uso de guión gráfico, las células de la estáticas, en cellForRowAtIndexPath: la línea

UITableViewCell *cell = 
   [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

siempre devuelve nil.

He comprobado lo siguiente:

  • Identificador de la celda está establecida correctamente en IB/Storyboard y puedo usar el mismo identificador en el código. He comprobado muchas veces.
  • No he creado instancias del controlador de vista de otros lugares (de la cual era el problema en esta pregunta de stackoverflow).

Mi punto de vista controlador es una subclase de UITableViewController, por supuesto, envuelta en una ad hoc de navegación controlador en el guión gráfico. La sospecha de que mi controlador de vista de alguna manera no saber acerca de la célula de identificadores definidos en el guión porque podría ser otro ejemplo, aquí está el código de la «instancia» de ella. En prepareForSegue:, yo uso

CustomViewController *vc = [[[segue destinationViewController] 
   viewControllers] objectAtIndex:0];

Otras personalizaciones del controlador de vista de hecho aquí (configuración de propiedades, etc.) funciona bien.

Estoy usando las células de la estáticas debido a que el número de secciones y de las filas no cambia, y cada celda contiene texto estático (y otros controles o campos de texto para ser editado).

A mí me parece que esto es una tarea muy habitual (personalizar las células de la estáticas de storyboard en el controlador de vista del origen de datos métodos). ¿Qué estoy haciendo mal?

  • Usted tendrá que demostrar nosotros, donde puede realmente manejar la creación de su celda personalizada. Esa es la parte importante.
  • Puedo crear la costumbre de células en el guión gráfico. Tipo «Custom» y su propia celda identificador. ¿No es así?
  • Me perdí toda la parte estática. Las células de la estáticas están diseñados íntegramente en el guión gráfico. véase la parte 2 de este tutorial www.raywenderlich.com/5191/beginning-storyboards-in-ios-5-part-2
  • Fui a través de eso. ¿Por qué es devolver nil?
  • Porque no puedes usar eso con estática storyboards :). Ese método es para el prototipo de estilo.
InformationsquelleAutor Mundi | 2012-04-03

5 Comentarios

  1. 44

    Con contenido estático en una vista de tabla, no de implementar cualquiera de las fuentes de datos métodos (incluyendo tableView:cellForRowAtIndexPath:, por lo que nunca iba a quitar de la cola de las células. No es la cola para el contenido estático (en la que puede participar en, de todos modos).

    Si quieres obtener un puntero a una celda en particular:

    • se obtiene de la tabla de la vista usando cellForRowAtIndexPath::

      UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    • tener una toma de corriente de la celda específica y personalizar directamente.

    • Iterar a través de las células y comprobar la reuseIdentifier propiedad para obtener la celda en la que está interesado.

    Cualquiera de estas cosas se pueden hacer en viewWillAppear o similar.

    Si quieres tener el contenido completamente diferente en las células que se encuentran en el guión gráfico, a continuación, las células de la estáticas no son probablemente la mejor opción. Usted debe utilizar prototipos dinámicos (tenga en cuenta que usted puede tener varios prototipos en el guión gráfico) con el origen de datos tradicional de los métodos de lugar.

    • Gracias – por lo que para lo que yo quiero hacer, me parece realmente necesita para utilizar el prototipo de las células. Podría agregar que a su respuesta, por lo que puedo comprobar esto? Gracias por tus aclaraciones!
    • Editado mi respuesta, que en realidad no decir lo que estaba tratando de hacer, así que espero que sea de ayuda!
    • Estoy tratando de tener título estático etiquetas y los campos de texto editables en algunas de las celdas, y algunos otros controles en los demás. Yo pensaba que usted puede rellenar los datos de forma dinámica en estática de las células. El número o posición de las células no cambia. He comenzado a hacer con el prototipo de las células, y es mucho trabajo – casi peor que antes de storyboard!
    • Sólo tiene una toma de corriente para cada campo de texto editable. Easy peasy. Esto lo he hecho yo mismo para un tipo de ajustes de pantalla.
    • Que es una cantidad insana de trabajo! Tiene que ser más simple que eso. Yo soy de llenado en las propiedades de un objeto personalizado, por lo que podría ser potencialmente una gran cantidad de datos a ser procesados, pero sobre todo de texto en los campos de texto. Además, esto no funciona con los prototipos de las células. – Además, me doy cuenta, de que los campos de texto son invisibles, por alguna razón… Guión de pesadilla!
    • ¿Cuántos campos de texto están hablando?
    • Por ahora, digamos, 8. Podría ser de 24 en el futuro. Yo todavía no entiendo por qué la célula está volviendo como nil con las células de la estáticas. Yo no entiendo por qué el campo de texto no es visible en el prototipo de las células.
    • ¿Y el caso especial de las vistas de tabla con una mezcla de contenido estático y dinámico como se discutió aquí?

  2. 0

    La solución fue utilizar el prototipo de las células en lugar de estática de las células. Todavía estoy dando el cheque a @jrturton como él fue el primero que me de la idea.

    Otra interesante de error que me acaba de resolver: con el prototipo de células de tipo «Custom», si intenta llenar cell.textLabel con el texto, se acaba de funcionar automáticamente, pero el resto de subvistas comportarse de manera muy extraña. Yo sólo uso mi etiqueta personalizada ahora, y todo funciona bien.

    Saludos, gracias a todos por ayudar.

    • ¿cómo utilizar la «Costumbre» de la Célula? porque dequeueReusableCellWithIdentifier devuelve nil?
    • Puede especificar «Personalizado» en el Interface Builder.
    • Hice especificar Personalizado en el Interface Builder, entonces me subclases de la UITableViewCell y asignado a esta celda. Pero trae vacío dinámico de las células.
    • Suena como que usted no se configura correctamente.
  3. 0

    Diferente a la respuesta anterior,

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    no funcionará. Pero el mencionado método para crear una toma de corriente para la cell sí está funcionando.

    También es posible colocar los puntos de vista tales como UIButtons o UITextFields en el cell y tienen puntos de venta de esos también.

    Ambos métodos pueden utilizarse también en combinación. E. g. establecer el cell.textLabel.text para una celda en particular y que otro control que se accede desde los controles de salida.

  4. 0

    En el guión gráfico, la Estática de las Células NO PUEDEN aplicar los Métodos de la <UITableViewDataSource> protocolo.

    Así que usted podría utilizar los métodos que se incluyen en <UITableViewDelegate>.

  5. 0

    Aún puede utilizar el origen de datos/métodos de delegado de la estática UITableView, solo que usted no tiene que crear nuevas células.

    Si quieres modificar las células con el origen de datos métodos, dentro de cellForRowAtIndexPath: :

    UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

    y, a continuación, empezar a modificar la celda.

Dejar respuesta

Please enter your comment!
Please enter your name here