2012-04-16 8 views
36

Soy un novato con el guión gráfico y así tengo algunas dificultades ...Conectar salida de un prototipo de célula en un guión gráfico

he creado un TableViewController y me gustaría personalizar el prototipo de la célula. En Cell Prototype, he agregado varias etiquetas que me gustaría personalizar con mi propia clase que hereda de UITableViewCell (AreaListCell). En Storyboard, para Cell Prototype he configurado Custom Class con "AreaListCell" y su estilo es "Custom".

En el guión gráfico, cuando selecciono el prototipo de la célula y luego el asistente, el asistente muestra mi clase que implementa la UITableViewController (AreasTableViewController) y no
mi clase "AreaListCell".

La consecuencia es que puedo crear una salida (usando Ctrl + Arrastrar desde la etiqueta del prototipo de celda) a la clase AreasTableViewController pero no a la clase AreaListCell. ¿Alguna idea de cómo conectar el Cell Prototype con mi clase AreaListCell?

Gracias por su ayuda!

Respuesta

127

ACTUALIZACIÓN: A partir de Xcode 4.6 (posiblemente antes) ahora puede crear tomas mediante el control de arrastre! - Esto tiene que hacerse en una sección de interfaz o extensión de clase (la extensión de clase no existe por defecto para las nuevas subclases de celdas.) Gracias a Steve Haley por señalar esto.

No se puede obtener la salida automáticamente conectado y creado arrastrando en el bloque de código en el editor asistente, que es pobre, pero puede crear las salidas de forma manual y conectarlos a continuación

en la interfaz de subclase celular:.

@interface CustomCell : UITableViewCell 

@property (nonatomic) IBOutlet UILabel* customLabel; 

@end 

Sintetizar de forma normal en la implementación.

En el guión gráfico, seleccione la celda y vaya al inspector de conexiones, verá la nueva toma de corriente.Arrastre desde allí al elemento relevante en su prototipo:

enter image description here

Esto ahora se puede acceder como cell.customLabel en su método cellForRowAtIndexPath:.

+0

Solía ​​hacer eso para mi celular, pero de repente tiene stop funciona, my customLabel IBOutlet == nil, y no aparece en la celda. ¿Cuál puede ser la causa del problema? En los enchufes de storiboard están conectados. – BergP

+0

TLDR: crea un punto de venta mediante programación y conéctalos mediante control + arrastre del guión gráfico – Christoph

21

Sí, no puede conectar vistas que están dentro de una celda de prototipo personalizada utilizando el método ctrl + drag. En su lugar, use la propiedad de etiqueta de la vista y luego, cuando esté construyendo la celda, saque las etiquetas usando sus etiquetas.

aquí:

//Let's assume you have 3 labels. One for a name, One for a count, One for a detail 
//In your storyboard give the name label tag=1, count tag=2, and detail tag=3 


- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomTableViewCell *theCell = [tableView dequeueReusableCellWithIdentifier:@"Prototype Cell"]; 

    UILabel *nameLabel = (UILabel *)[theCell viewWithTag:1]; 
    UILabel *countLabel = (UILabel *)[theCell viewWithTag:2]; 
    UILabel *detailLabel = (UILabel *)[theCell viewWithTag:3]; 

    nameLabel.text = @"name"; 
    countLabel.text = @"count"; 
    detailLabel.text = @"details"; 

    return theCell; 
} 

También podría establecer las etiquetas como propiedades en el código de celda personalizado y luego, cuando la célula se inicia el uso de la llamada viewWithTag para asignar las propiedades de la etiqueta de las etiquetas que haya creado en tus guiones gráficos

Me tomó unos días darme cuenta de que no podía presionar Ctrl + arrastrar desde dentro de una celda personalizada para crear una IBOutlet.

¡Buena suerte!

EDITAR: PUEDE crear IBOutlets para sus etiquetas dentro de una celda personalizada y crear los enlaces programatéticamente, pero no a través del método ctrl + drag.

EDIT 2: Estaba totalmente equivocado, puede presionar + arrastrar. Vea la segunda respuesta a esta pregunta. Es complicado, pero funciona bastante bien.

+0

Por supuesto que puede conectar las salidas de un prototipo para una subclase de células usada como prototipo. Voy a responder con detalles una vez que pueda obtener un ejemplo juntos. – jrturton

+0

Con ctrl + arrastrar? –

+0

OK, no puede crear puntos de venta automáticamente arrastrando el control al asistente, pero PUEDE crear tomas manualmente y conectarlas. Ciertamente no necesita usar etiquetas. Bajar un voto fue un poco demasiado, si editas la respuesta, la eliminaré (no puedo cambiar un voto ahora a menos que edites) – jrturton

0

Swift 3

// estamos usando esto si sus imágenes están en el servidor.

// estamos obteniendo imágenes de una url.

// puede configurar la imagen desde su Xcode.

  1. La URL de las imágenes están en un nombre de matriz = miniatura es decir self.thumbnail [indexPath.row]
  2. en UITableViewCell poner un imageView en células
  3. seleccione UIImageView asignarle una etiqueta de guión gráfico.

    let pictureURL = URL(string: self.thumbnail[indexPath.row])! 
    let pictureData = NSData(contentsOf: pictureURL as URL) 
    let catPicture = UIImage(data: pictureData as! Data) 
    var imageV = UIImageView() 
    imageV = cell?.viewWithTag(1) as! UIImageView 
    imageV.image = catPicture 
    
Cuestiones relacionadas