Usted está cerca en su enfoque. Lo que he hecho en situaciones similares es crear subclases UITableViewCell separadas, configurar la etiqueta del UISwitch para que sea el índice de la ruta del índice, y solo usar esa subclase UITableViewCell en una sección específica de la vista de tabla. Esto le permite usar la etiqueta de la celda para determinar de manera única qué celda tiene el evento sin mantener una lista de índices separada (como parece que está haciendo).
Como el tipo de celda es único, puede acceder fácilmente a los otros elementos de la celda creando métodos/propiedades en la subclase UITableViewCell.
Por ejemplo:
@interface TableViewToggleCell : UITableViewCell {
IBOutlet UILabel *toggleNameLabel;
IBOutlet UILabel *detailedTextLabel;
IBOutlet UISwitch *toggle;
NSNumber *value;
id owner;
}
@property (nonatomic, retain) UILabel *toggleNameLabel;
@property (nonatomic, retain) UILabel *detailedTextLabel;
@property (nonatomic, retain) UISwitch *toggle;
@property (nonatomic, retain) id owner;
-(void) setLable:(NSString*)aString;
-(void) setValue:(NSNumber*)aNum;
-(NSNumber*)value;
-(void) setTagOnToggle:(NSInteger)aTag;
-(IBAction)toggleValue:(id)sender;
@end
En:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// ... prior iniitalization code for creating cell is assumed
toggleCell.owner = self;
[toggleCell setLable:@"some string value"];
[toggleCell setTagOnToggle:indexPath.row];
toggleCell.owner = self;
return toggleCell;
//... handle cell set up for other cell types as needed
}
propietario es el delegado para la célula y luego se puede utilizar para iniciar acciones en su controlador. Asegúrese de que conecta el UISwitch a la acción toggleValue, para que pueda iniciar acciones en el delegado cuando el UISwitch cambia de estado:
-(IBAction)toggleValue:(id)sender;
{
BOOL oldValue = [value boolValue];
[value release];
value = [[NSNumber numberWithBool:!oldValue] retain];
[owner performSelector:@selector(someAction:) withObject:toggle];
}
Con la aprobación de la UISwitch con la llamada al método, a continuación, puede acceder a la ruta del índice de la célula. También puede omitir el uso de la propiedad de etiqueta al tener explícitamente un ivar para almacenar el NSIndexPath de la celda y luego pasar la celda completa con la llamada al método.
Acabo de hacer lo mismo, mi único comentario sería convertir el nombre en una propiedad. – typemismatch