2012-04-21 17 views
6

Hasta ahora solo he necesitado implementar células prototipo con diseños predefinidos (normal, subtítulos, etc.) y no ha sido un problema.iOS Prototype Cells con UIControls dentro de

Ahora necesito implementar células prototipo que contengan algunos controles como un interruptor segmentado, un interruptor o cualquier otro. El problema es que no he podido averiguar cómo se implementan las acciones desencadenadas y cómo están relacionadas con el control. Además, no he encontrado ningún ejemplo de cómo se implementan las diferentes células prototipo dentro de un solo UITableViewController.

Sé que es una especie de pregunta genérica, pero apreciaría algunos consejos aquí. Tal vez alguien sepa acerca de alguna documentación, tutorial, etc. Bueno, cualquier ayuda haría,

Thnaks de antemano.

Respuesta

11

Me llevó un tiempo entender cómo usar las células prototipo. Si desea acceder a los elementos de la interfaz de usuario dentro de una celda prototipo, debe crear una subclase de UITableViewCell y asignarla a la celda prototipo en Interface Builder. entonces usted tiene que definir las propiedades IBOutlet manualmente ej .:

@interface OptionSwitchCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UISwitch* switchControl; 
@end 

Después de eso, se pueden conectar los elementos de la interfaz a través del control-arrastrar desde el elemento de la definición de la propiedad en la vista auxiliar. En su lugar, IBActions se puede definir dentro del controlador de vista propietario. Puede controlar y arrastrar desde un elemento de interfaz al archivo de encabezado View Controller y crear una acción. Dentro de la implementación de la acción es probable que desee saber qué celda ha estado activando la acción. Lo hago así:

@implementation SomeTableViewController 

- (IBAction)toggleActivity:(id)sender { 
    OptionSwitchCell* cell = (OptionSwitchCell *)[sender superview].superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    ... 
} 

@end 

Otra solución para encontrar la celda correspondiente y la ruta del índice (por jrturton):

- (IBAction)toggleActivity:(id)sender { 
    CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint]; 
    OptionSwitchCell* cell = (OptionSwitchCell *)[self.tableView cellForRowAtIndexPath:hitIndex]; 
    ... 
} 

Aunque este es un poco peculiar, no he encontrado una solución mejor hasta aquí. Espero que ayude.

+1

Hace unos minutos, encontré este video (y su segunda parte): http://youtu.be/0AsChJk422c es más o menos lo que explicaste pero usa un delegado. El mismo principio, pero se ve un poco más limpio. Gracias por tu respuesta ! – Marcal

+0

De hecho, es una solución más limpia. Gracias por el puntero. Aunque es un poco demasiado código repetitivo para todos los protocolos. – Sbhklr

+1

Una mejor manera de encontrar la fila del control se puede encontrar en mi respuesta aquí: http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 – jrturton

Cuestiones relacionadas