2010-09-21 6 views
0

J'ai une application avec le code suivant répertorié ci-dessous qui affiche des questions aléatoires pour l'utilisateur final. J'essaie de comprendre comment faire en sorte qu'un utilisateur puisse revenir en arrière dans un tableau affiché de manière aléatoire. Par exemple, un utilisateur passe par les questions et avance accidentellement et veut revenir en arrière, je veux qu'ils puissent simplement appuyer sur un bouton de retour. Pourriez-vous fournir des conseils sur la façon de procéder? Merci beaucoup!!!Rappelez-vous la sortie précédente dans un tableau aléatoire

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    myArray5= [NSArray arrayWithObjects:   
     @"Question 1", 
     @"Question 2", 
     @"Question 3", 
     @"Question 4", 
     nil]; 

    int chosen = arc4random() % [myArray5 count]; 
    NSString *item = [myArray5 objectAtIndex: chosen]; 
    label3.text = [NSString stringWithFormat: @"%@", item]; 
    label3.alpha = 0; 
    label3.transform = CGAffineTransformIdentity; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.0]; 
    label3.alpha = 1; 
    label3.transform = CGAffineTransformMakeScale(1, 1); 
    [UIView commitAnimations]; 
    UITouch *touch = [[event allTouches] anyObject]; 
    if (touch.tapCount == 2) { 
    } 
} 

Répondre

0

Vous pouvez, bien sûr créer un NSMutableArray, qui coffres-forts indices (int choisis) de vos questions choisies au hasard. Vous pouvez également jeter un oeil à la UINavigationController qui fournit les moyens de revenir en arrière dans une série de vues. Enfin, vous devriez penser à encapsuler votre logique de question. Il semble que vous ayez à la fois le code pour votre interface et le code pour vos questions dans une classe. Une fois votre application agrandie, vous rencontrerez des problèmes avec cette approche. Regardez le concept de Model-View-Controllers.

0

Une possibilité serait de pré-calculer les indeces des questions que l'utilisateur sera demandé lorsque votre application est initialisée. Cependant, cela signifierait qu'il y aurait une limite codée en dur sur le nombre de questions que vous poseriez, ou peut-être si vous atteignez la fin du tableau, vous revenez au début. Je ne suis pas familier avec Objective-C pour porter avec moi

const int NUM_QUEsTIONS = 1000; // Arbitrary number 
int questions[NUM_QUESTIONS]; 

init() 
{ 
    for (int i = 0; i < NUM_QUESTIONS; ++i) 
    { 
     questions[i] = RandomNumber(); 
    } 
} 

puis dans votre gestionnaire d'événements, vous pouvez tout simplement incrémenter un compteur dans ce tableau et poser cette question.

Pour les questions infinies, vous devriez probablement utiliser une liste à double liaison.

0

Couple d'idées:

Idée 1. Conserver les ids pour la question choisie dans un tableau supplémentaire.

Idée 2. Aléatoirez le tableau et faites-le défiler.

Idée 3. Si vous voulez éviter d'utiliser une question deux fois, vous pouvez

  • utiliser un index pour indiquer combien de questions sont admissibles à la sélection
  • basé sur cet indice vous créez un entier aléatoire
  • vous affichez la question qui est stockée dans le tableau à cette position aléatoire
  • vous déplacez l'élément à cette position à l'indice max
  • vous diminuez indice max

Un peu comme ceci:

NSMutableArray *array = [NSMutableArray arrayWithObjects: @"a", @"b", @"c", @"d", @"e", @"f", nil]; 
NSInteger maxIndex = [array count]-1; 
do { 

    NSInteger randomIndex = arc4random() % (maxIndex+1); 

    NSLog(@"%@", [array objectAtIndex:randomIndex]); 
    [array exchangeObjectAtIndex:randomIndex withObjectAtIndex:maxIndex]; 
    maxIndex--; 



} while (maxIndex > -1); 
Questions connexes