Comment faire pour tous,déclaration de commutateur à l'aide d'un selectedSegmentIndex
Ceci est la première fois l'affichage sur le site, donc je suppose que je ne l'ai pas suivi toutes les formats et protocoles correctement.
Mon application a un UIView contenant une liste de questions, et un UISegmentedControl appelé "question_btn" pour chaque question. Le UISegmentedControl a 2 segments, le premier pour une réponse NON, le 2ème pour une réponse OUI, correspondant à chaque question. Chaque "question_btn" appelle individuellement - (void) processQuestions {}, mais quand je clique sur chaque "question_btn" seul le dernier est traité correctement. Toutes les précédentes "question_btns" appellent la méthode processQuestions, mais n'implémentent pas son code.
Im mon problème avec le UISegmentControl, ou l'instruction switch, ou les deux.
Toutes les suggestions seraient grandement appréciées.
Le bouton est défini comme suit
question_btn = [[[UISegmentedControl alloc] initWithFrame:CGRectMake(QUESTION_BUTTON_XPOS, questionsButton_YPos, 80, 20)] autorelease];
[question_btn insertSegmentWithTitle:@"No" atIndex:0 animated:NO];
[question_btn insertSegmentWithTitle:@"Yes" atIndex:1 animated:NO];
[question_btn setEnabled:YES forSegmentAtIndex:0];
[question_btn setEnabled:YES forSegmentAtIndex:1];
question_btn.segmentedControlStyle = UISegmentedControlStyleBar;
question_btn.tintColor = [UIColor colorWithRed:200.0/255.0 green:200.0/255.0 blue:200.0/255.0 alpha:1.0];
[question_btn addTarget:self action:@selector(processQuestions) forControlEvents:UIControlEventValueChanged];
Voici les processQuestions
- (void) processQuestions
{
//NSLog(@"QuestionsView processQuestions: Called");
//Process the questions i.e. determine whether yes or no was the answer
answersArray = [[NSMutableArray alloc] init];
int selectedIndex;
selectedIndex = [question_btn selectedSegmentIndex];
switch (selectedIndex)
{
case 0:
NSLog(@"QuestionsView processQuestions: No answered");
break;
case 1:
NSLog(@"QuestionsView processQuestions: Yes answered");
break;
}
[answersArray addObject:[NSNumber numberWithInt:selectedIndex]];
NSLog(@"QuestionsView processQuestions: answersArray contains: %@", answersArray);
}
Voici comment je suis arrivé le code pour itérer correctement et obtenir la valeur d'index de question_btn sélectionné. Il s'agissait juste de créer un tableau mutable pour contenir les objets question_btn, , puis de définir la valeur d'index sélectionnée pour chaque bouton en utilisant une boucle for. buttonsArray est défini dans ma méthode createView.
buttonsArray = [[NSMutableArray alloc] init];
- (void) processQuestions
{// NSLog (@ "QuestionsView processQuestions: Appelée");
answersArray = [[NSMutableArray alloc] init];
int selectedIndex;
for (int i = 0; i < numQuestions; i ++)
{
question_btn = (UISegmentedControl*)[buttonsArray objectAtIndex:i];
selectedIndex = [question_btn selectedSegmentIndex];
switch (selectedIndex)
{
case 0:
NSLog(@"QuestionsView processQuestions: No answered for question: %d", i + 1);
break;
case 1:
NSLog(@"QuestionsView processQuestions: Yes answered for question: %d", i + 1);
break;
}
[answersArray addObject:[NSNumber numberWithInt:selectedIndex]];
}
NSLog(@"QuestionsView processQuestions: answersArray contains: %@", answersArray);
}
Pouvez-vous réindexer votre code correctement? –
Tous les contrôles segmentés sont ajoutés à la même vue? Comment savez-vous à quelle question la méthode processQuestions est-elle appelée? – Anna