2010-09-21 44 views
0

我有一個應用程序,下面列出的代碼顯示了最終用戶的隨機問題。我試圖弄清楚如何讓用戶能夠在隨機顯示的數組中向後導航。例如,用戶正在經歷這些問題,並意外地前進了一個並想要返回,我希望他們能夠簡單地點擊後退按鈕。你能提供關於如何做到這一點的指導嗎?非常感謝你!!!記住隨機數組中的上一個輸出

- (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) { 
    } 
} 

回答

0

你當然可以創建一個NSMutableArray,它保護隨機選擇的問題的索引(int選中)。您也可以看看UINavigationController,它提供了在一系列視圖中向後導航的方法。最後,你應該考慮封裝你的問題邏輯。好像你在一個類中同時擁有你的界面的代碼和你的問題的代碼。一旦你的應用程序變大,你會遇到這種方法的問題。看看Model-View-Controllers.的概念

0

一種可能性是預先計算用戶在您的應用初始化時會被問到的問題的個數。然而,這意味着您要問的問題數量會有硬編碼的限制,或者如果您到達陣列的末尾,您將返回到開始位置。我不熟悉Objective-C的如此忍受我

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

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

,然後在事件處理您只需增加一個計數器到這個陣列,並問這個問題。

對於無限的問題,你應該使用一個雙向鏈表。

0

幾個想法:

想法1.將所選問題的id存儲在一個額外的數組中。

想法2.隨機化數組,並逐步完成。

理念3.如果你想避免使用問題兩次,你可以

  • 使用索引來表明多少問題根據您創建一個隨機整數,指數有資格入選
  • 你顯示在該隨機的位置存儲在數組中的問題
  • 你在該位置移動元件到最大索引
  • 你降低最高索引

排序是這樣的:

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);