Comment puis-je incorporer un UISwitch
sur une cellule UITableView
? Des exemples peuvent être vus dans le menu des paramètres.
Ma solution actuelle:
UISwitch *mySwitch = [[[UISwitch alloc] init] autorelease];
cell.accessoryView = mySwitch;
Le définir comme accessoireView est généralement la voie à suivre. Vous pouvez le configurer dans tableView:cellForRowAtIndexPath:
Vous souhaiterez peut-être utiliser target/action pour faire quelque chose lorsque le commutateur est basculé. Ainsi:
- (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" );
}
Vous pouvez ajouter un UISwitch ou tout autre contrôle au accessoryView
de la cellule. De cette façon, il apparaîtra sur le côté droit de la cellule, ce qui est probablement ce que vous voulez.
if (indexPath.row == 0) {//If you want UISwitch on particular row
UISwitch *theSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
[cell addSubview:theSwitch];
cell.accessoryView = theSwitch;
}
Vous pouvez préparer la cellule dans Interfacebuilder, la lier à un IBOutlet de votre Viewcontroller et la renvoyer lorsque la vue de table demande la ligne appropriée.
Au lieu de cela, vous pouvez créer un xib distinct pour la cellule (à nouveau avec IB) et le charger à l'aide d'UINib lors de la création des cellules.
Enfin, vous pouvez créer le commutateur par programme et l'ajouter à la vue de contenu ou à la vue des accessoires de vos cellules.
Laquelle vous convient le mieux dépend en grande partie de ce que vous aimez faire. Si le contenu de vos vues de table est fixe (pour une page de paramètres, etc.), les deux premiers pourraient bien fonctionner, si le contenu est dynamique, je préférerais la solution programmatique. Veuillez être plus précis dans ce que vous aimeriez faire, cela faciliterait la réponse à votre question.
pour les utilisateurs de Swift
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "TableIdentifer")
let switch = UISwitch()
cell.accessoryView = switch
}