iphone objective-c cocoa-touch uitableview uiswitch

iphone - UISwitch en una celda UITableView



objective-c cocoa-touch (5)

¿Cómo puedo insertar un UISwitch en una celda UITableView ? Los ejemplos se pueden ver en el menú de configuración.

Mi solución actual:

UISwitch *mySwitch = [[[UISwitch alloc] init] autorelease]; cell.accessoryView = mySwitch;


Establecerlo como el accesorioView es usualmente el camino a seguir. Puede configurarlo en tableView:cellForRowAtIndexPath: Puede usar target / action para hacer algo cuando se da la vuelta al switch. Al igual que:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { switch( [indexPath row] ) { case MY_SWITCH_CELL: { UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:@"SwitchCell"]; if( aCell == nil ) { aCell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"SwitchCell"] autorelease]; aCell.textLabel.text = @"I Have A Switch"; aCell.selectionStyle = UITableViewCellSelectionStyleNone; UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero]; aCell.accessoryView = switchView; [switchView setOn:NO animated:NO]; [switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; [switchView release]; } return aCell; } break; } return nil; } - (void)switchChanged:(id)sender { UISwitch *switchControl = sender; NSLog( @"The switch is %@", switchControl.on ? @"ON" : @"OFF" ); }


Puede agregar un UISwitch o cualquier otro control a la vista de accessoryView la celda. De esta forma, aparecerá en el lado derecho de la celda, que es probablemente lo que desea.


Puede preparar la celda en Interfacebuilder, vincularla a una IBOutlet de su Viewcontroller y devolverla cuando la tabla de tareas solicite la fila correcta.

En cambio, podría crear un xib separado para la celda (nuevamente con IB) y cargarlo usando UINib en la creación de las celdas.

Finalmente, puede crear el modificador mediante programación y agregarlo a la vista de contenido o vista de accesorios de sus celdas.

Cuál de ellas le conviene depende en gran medida de lo que le gusta hacer. Si el contenido de su tabla vista es fijo (para una página de configuración, etc.), las dos primeras podrían funcionar bien, si el contenido es dinámico, preferiría la solución programática. Sea más específico en lo que le gustaría hacer, esto facilitaría la respuesta a su pregunta.


para usuarios rápidos

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell(style: .default, reuseIdentifier: "TableIdentifer") let switch = UISwitch() cell.accessoryView = switch }


if (indexPath.row == 0) {//If you want UISwitch on particular row UISwitch *theSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; [cell addSubview:theSwitch]; cell.accessoryView = theSwitch; }