2010-08-27 6 views
0

Je fais une application sur une question à choix multiples (QCM) où je dois obtenir des questions, des réponses d'un webservice. J'ai 1 question avec 4 options, parmi les 4 options, j'ai 1 bonne réponse. Chacune des options, j'ai créé un bouton par programmation. Voici comment je l'ai fait:Comment localiser le bouton créé par programmation est cliqué?

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(40, yButton, 30, 30); 
    [button setTitle:@" " forState:UIControlStateNormal]; 

[button addTarget:self action:@selector(correctPressed) 
forControlEvents:UIControlEventTouchDown]; 
    [buttonArray addObject:button]; 

Combien d'options que j'ai dans une question déterminera combien de boutons seront créés. Maintenant, quand je veux montrer une indication que quand un certain bouton est cliqué, ce bouton doit rester en surbrillance jusqu'à ce que je décide de changer ma réponse. J'ai fait quelques approches. J'ai utilisé IndexPath, en espérant que je pourrais utiliser indexPath.row comme TableView. Ça n'a pas marché du tout. Quelqu'un peut-il aider?

Merci

Répondre

0
for(int i=0; i<[videolistArray count];i++){ 


    NSArray *myWords = [[[videolistArray objectAtIndex:i] valueForKey:@"video"] componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; 
    //NSLog(@"%@",[myWords lastObject]); 

    UIButton *guitaristButton = [[UIButton alloc]init]; 
    guitaristButton.frame = CGRectMake(0, ycomp, 300, 35); 
    guitaristButton.tag = i; 
    [guitaristButton setBackgroundImage:[UIImage imageNamed:@"green-buttons.png"] forState:UIControlStateNormal]; 
    [guitaristButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    [guitaristButton setTitle:[myWords lastObject] forState:UIControlStateNormal]; 
    [guitaristButton addTarget:self action:@selector(VideoButtonSelected:) forControlEvents:UIControlEventTouchUpInside]; 
    //[guitaristButton performSelector:<#(SEL)aSelector#> withObject:<#(id)object1#> withObject:<#(id)object2#> 
    [videoScrollView addSubview:guitaristButton]; 
    [guitaristButton release]; 

    ycomp = ycomp+35; 
} 
videoScrollView.contentSize=CGSizeMake(300, ycomp); 

} - (void) VideoButtonSelected: (UIButton *) {expéditeur NSArray * MyWords = [[[videolistArray objectAtIndex: sender.tag] valueForKey: @ "vidéo"] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @ "/"]]; // NSLog (@ "% @", [myWords lastObject]); [setAlarmVedioButton setTitle: [myWords lastObject] forState: UIControlStateNormal]; [videoNameButtonView removeFromSuperview]; vedioString = [[videolistArray objectAtIndex: sender.tag] valueForKey: @ "vidéo"]; }

dans le code ci-dessus me font UIButton avec l'aide d'un tableau et compte lorsque je sélectionne une touche puis afficher la même valeur de texte du tableau sur le dernier bouton

1

Remplacez cette

[button addTarget:self action:@selector(correctPressed) 
forControlEvents:UIControlEventTouchDown]; 
    [buttonArray addObject:button]; 

[button addTarget:self action:@selector(correctPressed:) 
forControlEvents:UIControlEventTouchDown]; 
    [buttonArray addObject:button]; 

maintenant dans votre sélection, vous obtiendrez une référence au bouton.

par ex.

UIButton * lastButtonPressed = nil; 
-(void) correctPressed:(UIButton *) theButton{ 
    [theButton setHighlighted:YES]; 
    if(lastButtonPressed) [lastButtonPressed setHighlighted:NO]; 
    lastButtonPressed = theButton; 

} 

** Vous pouvez utiliser la méthode sélectionnée pour les boutons. Vous pouvez donc définir un bouton sélectionné à la place. J'ai juste tapé ce code, vérifiez mon @selecteur de changement et que setHighlighted est réellement correct mais vous devriez avoir l'idée.

Maintenant, votre code appellera le sélecteur et il devrait avoir une référence au bouton d'appel.

John.

+0

Merci John, va essayer le code out. Pouvez-vous m'expliquer pourquoi vous utilisez '(UIButton *) theButton' pour? –

+0

Edit: J'ai essayé le code et ça marche, mais pas comme je le veux. Je voulais qu'il soit mis en évidence jusqu'à ce que je tape à nouveau sur d'autres boutons ou sur lui-même. '[le bouton SetHighlighted: YES]' deviendra 'NO' quand je relâcherai mon doigt. –

+0

J'ai l'impression de te déranger, désolé John. Mais ça ne marche toujours pas. Est-ce que ça marche pour toi? Lorsque vous appuyez sur le bouton, il reste en surbrillance lorsque vous relâchez votre doigt? –

0

Tout va bien, j'ai résolu ce problème.

Ce que j'ai fait a été un button.tag = number; number++ quelque part dans les codes. En utilisant des méthodes de marquage, je peux ensuite suivre le arrays sur lequel le bouton est cliqué.

-(void)correctAnswer 
{ 
    yButton += 50; 
    yLabel += 50; 

    label = [[UILabel alloc] initWithFrame:CGRectMake(75, yLabel, 150, 30)]; 
    label.backgroundColor = [UIColor clearColor]; 
    [label setText:Option]; 
    [labelArray addObject:label]; 
    [self addSubview:label]; 

    button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(40, yButton, 30, 30); 
    button.tag = idx; 
    NSLog(@"-------====== Tag Index is: %i", idx); 
    UIImage * btnImage1 = [UIImage imageNamed:@"uncheckedCheckbox.png"]; 
    [button setImage:btnImage1 forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(correctPressed:) 
    forControlEvents:UIControlEventTouchUpInside]; 

    [buttonArray addObject:button]; 
idx++; 
[self addSubview:button]; 

} 


-(void)correctPressed:(id)sender { 

int but = (int)[(UIButton*)sender tag]; 

if(correctValue) { 
    UIImage * btnImage1 = [UIImage imageNamed:@"uncheckedCheckbox.png"]; 
    UIButton *btn1 = [buttonArray objectAtIndex:but]; 
    [btn1 setImage:btnImage1 forState:UIControlStateNormal]; 
    [btn1 setImage:btnImage1 forState:UIControlStateNormal]; 
    [btn1 setTitle:@"" forState:UIControlStateNormal]; 
    correctValue = NO; 

} else { 
    UIImage * btnImage2 = [UIImage imageNamed:@"checkedCheckbox.png"]; 
    UIButton *btn2 = [buttonArray objectAtIndex:but]; 
    [btn2 setImage:btnImage2 forState:UIControlStateNormal]; 
    [btn2 setImage:btnImage2 forState:UIControlStateNormal]; 
    [btn2 setTitle:@"" forState:UIControlStateNormal]; 
    correctValue = YES; 
} 

NSLog(@"Correct answer!!");  
} 
Questions connexes