web-dev-qa-db-fra.com

UISwitch dans une cellule UITableView

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;
80
testing

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

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.

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

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.

2
Toastor

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 
}
0
king_T