2013-08-14 3 views
1

Je dois utiliser des cases à cocher (au lieu de UISwitch), car elles seront éventuellement imprimées sur une feuille. J'utilise le code suivant pour initialiser ma case à cocheriOS - Gestion de plusieurs cases à cocher

checkbox1 = [[UIButton alloc] initWithFrame:CGRectMake(40, 226.5, 134, 20)]; 
[checkbox1 setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
[checkbox1 setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 
[checkbox1 addTarget:self action:@selector(checkboxSelected:) forControlEvents:UIControlEventTouchUpInside]; 
[self addSubview:checkbox1]; 

et le code suivant pour gérer le commutateur

-(void)checkboxSelected:(id)sender { 

if([checkbox1 isSelected]==YES) { 
    [checkbox1 setSelected:NO]; 
} else { 
    [checkbox1 setSelected:YES]; 
} 

Tout cela fonctionne parfaitement bien. . . quand je fais face à 1 case à cocher. . . mais si je veux avoir disons 10 cases à cocher sur la même page - Ai-je besoin de créer 10 méthodes séparées?

Cela semble juste inutile. . .. est-il un meilleur moyen d'y parvenir?

Merci pour votre aide

+0

Vous pouvez créer votre propre contrôle (classe personnalisée). –

Répondre

4

Vous pouvez utiliser la même méthode pour toutes les cases. paramètre Sender dans votre méthode checkboxSelected est le UIButton qui a déclenché l'action, il sera exploité case à cocher dans votre cas:

-(void)checkboxSelected:(UIButton*)sender { 
    sender.selected = !sender.selected; 
} 
+1

Il n'est pas nécessaire de définir l'étiquette du bouton pendant que nous créons un bouton comme par dessus la question ? avec vous répondez.? –

+0

Merci: c'est en fait parfait, ça marche! mais pourriez-vous l'expliquer un peu pour que je puisse accepter votre réponse? - Qu'est-ce qui se passe à 'sender.selected =! sender.selected'? –

+1

@NitinGohel, vous n'avez pas besoin de tag si vous voulez juste changer l'état sélectionné. Mais vous pouvez en avoir besoin lorsque vous récupérerez les états sélectionnés plus tard pour un traitement ultérieur, cela dépendra de la structure de vos données – Vladimir

1

vous devez gérer Bouton Evey cocher la case withing une seule méthode en utilisant tag: -

dire Lat vous mise en caisse 10 Buttong avec ForLoop

for(i=0;i<10;i++) 
{ 
checkbox1 = [[UIButton alloc] initWithFrame:CGRectMake(40, 226.5, 134, 20)]; 
[checkbox1 setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
[checkbox1 setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 
checkbox1.tag=i; 
[checkbox1 setSelected:NO]; 
[checkbox1 addTarget:self action:@selector(checkboxSelected:) forControlEvents:UIControlEventTouchUpInside]; 
[self addSubview:checkbox1]; 
} 

-(void)checkboxSelected:(UIButton*)sender { 
    UIButton *btnPly = (UIButton *)sender; 
    if([btnPly isSelected]==YES) { 
     [btnPly setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
     [btnPly setSelected:NO]; 
    } else { 
     [btnPly setSelected:YES]; 
     [btnPly setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 

    } 
} 
+0

Je suis désolé, je pense que mes fautes d'orthographe auraient pu causer une certaine confusion. . . . Pourriez-vous regarder à nouveau la question? Et si les boutons doivent être positionnés sur différentes coordonnées CG? –

+0

cette méthode ci-dessus définie 10 case à cocher sepreated du bouton mais à propos CG-cordinates position que vous devez définir son cadre comme vous avez besoin pour forLoop –

1

essayez celui-ci

for(i=0;i<10;i++) 
{ 
HTN = [[UIButton alloc] initWithFrame:CGRectMake(40, 226.5, 134, 20)]; 
[HTN setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
[HTN setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 
HTN.tag=i; 
[HTN addTarget:self action:@selector(checkboxSelect:) forControlEvents:UIControlEventTouchUpInside]; 
[self addSubview:checkbox1]; 
} 

et de vérifier si vous avez sélectionné ou non

-(void)checkboxSelect:(UIButton*)sender { 
    sender.selected = !sender.selected; 
}