UISwitch em uma célula UITableView

Como posso incorporar um UISwitch em uma célula UITableView ? Exemplos podem ser vistos no menu de configurações.

Minha solução atual:

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

Defini-lo como o acessórioView é geralmente o caminho a percorrer. Você pode configurá-lo em tableView:cellForRowAtIndexPath: você pode querer usar target / action para fazer algo quando o switch for invertido. Igual a:

 - (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" ); } 

Você pode adicionar um UISwitch ou qualquer outro controle ao accessoryView da célula. Dessa forma, ele aparecerá no lado direito da célula, que é provavelmente o que você deseja.

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

Você pode preparar a célula no Interfacebuilder, vinculá-la a um IBOutlet do seu Viewcontroller e devolvê-la quando a tableview estiver pedindo a linha correta.

Em vez disso, você pode criar um xib separado para a célula (novamente com IB) e carregá-lo usando UINib na criação de células.

Finalmente, você pode criar a opção programaticamente e adicioná-la ao contentview ou à visualização de acessórios de suas células.

Qual delas combina com você depende em grande parte do que você gosta de fazer. Se o conteúdo das suas tableviews for fixo (para uma página de configurações, etc.), os dois primeiros poderão funcionar bem; se o conteúdo for dynamic, prefiro a solução programática. Por favor, seja mais específico no que você gostaria de fazer, isso tornaria a resposta à sua pergunta mais fácil.

para usuários rápidos

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