2012-05-21 80 views
0

我需要一些幫助,我的代碼。 我有一個UIAlert彈出第一次,你打開應用程序,在彈出我有兩個按鈕,用戶將選擇其中之一。我希望應用程序記住用戶選擇執行某些代碼或其他的按鈕。事情是我有這樣的代碼就在這裏:保存UIButton的屬性

-(void)changeLabel{ 


     progressView.progress += 0.25; 
    scan.hidden = YES; 


     if (progressView.progress == 1) { 
      label.hidden = YES; 

      progressView.hidden = YES; 

      [timer invalidate]; 

      imagesText.hidden = NO; 


      int randomNumber = arc4random() % 4; 

      switch (randomNumber) { 
       case 0: 


        imagesText.image = [UIImage imageNamed:@"image1.png"]; 


        break; 

       case 1: 


        imagesText.image = [UIImage imageNamed:@"image2.png"]; 


        break; 

       case 2: 

        imagesText.image = [UIImage imageNamed:@"image3.png"]; 

        break; 
       case 3: 

        imagesText.image = [UIImage imageNamed:@"image4.png"]; 

       default: 
        break; 

     } 
    } 
} 

所以我想讓它在某些方面,如果用戶選擇的第一個按鈕的應用程序會做的情況下0,1和2之間,如果他開關選擇第二個按鈕它會在3和其他之間進行。但我希望代碼的開頭在兩種情況下都是相同的。 我嘗試了一些東西,但它不工作,我想要的東西。 謝謝你的幫助!

更新:我修正了錯誤。所以現在我有這樣的:

- (void)viewDidLoad 
{ 


    if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"alert"] ]) { 
     [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"alert"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
     UIAlertView *alerta = [[UIAlertView alloc]initWithTitle:@"Welcome!" message:@"Select your language" delegate:self cancelButtonTitle:@"Button1" otherButtonTitles:@"Button2", nil]; 



     [alerta show]; 
     [alerta release]; 

    } 


    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 

    NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex]; 



    progressView.progress += 0.25; 
    scan.hidden = YES; 


    if (progressView.progress == 1) { 
     label.hidden = YES; 

     progressView.hidden = YES; 

     [timer invalidate]; 

     imagesText.hidden = NO; 

     int randomNumber; 

     if ([buttonTitle isEqualToString:@"Button1"]) { 

      randomNumber = arc4random() % 3; 

     }else if ([buttonTitle isEqualToString:@"Button2"]) { 

      randomNumber = arc4random() % 3 + 3; 

     } 

     switch (randomNumber) { 
      //CODE 
     } 
    } 
} 

的問題是,所有的代碼應該被稱爲來自:

- (IBAction)scan:(id)sender { 

    label.hidden = NO; 
    imagesText.hidden = YES; 
    progressView.hidden = NO; 


    progressView.progress = 0; 

    timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(alertView) userInfo:nil repeats:YES]; 

} 

所以我改變了@選擇到alertView之一,現在當我按下執行所有代碼的按鈕,它給了我那個SIGABRT錯誤。任何想法爲什麼? 謝謝你的幫助!

+0

您沒有(或者您沒有顯示)名爲「alertView」的選擇器 – rdelmar

+0

那麼我怎樣才能讓所有的代碼工作,當我按下按鈕?因爲它需要在uialertview內部嗎? – emiliomarin

+0

我不確定你現在在做什麼 - alertView:clickedButtonAtIndex:method是一個委託方法,當你點擊一個按鈕時被UIAlert調用,你不明確地調用它(如果這就是你想要的在定時器方法中做)。您需要創建一個屬性buttonTitle,以便可以跨不同的方法使用 - 唯一需要在委託方法中的是self.buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];然後,你會使用buttonTitle,就像我在答案中顯示的那樣。 – rdelmar

回答

0

當用戶選擇一個按鈕時,您需要使用該按鈕的某個唯一值來填充屬性,如其標題或標籤。一旦你的,你可以把一個if語句您randomNumber定義之前 - 這樣的事情:

if (buttonTitle isEqualToString:@"First Button") { 
     int randomNumber = arc4random() % 3; // Gives choices of 0,1, or 2 
    }else if (buttonTitle isEqualToString:@"Second Button"){ 
     int randomNumber = arc4random() % 3 + 3; // Gives choices of 3,4, or 5 
    } 

    switch (randomNumber) .... (rest of your code) 

在else-if語句的+3將確保在switch語句的選擇將與3日開始並從那裏上去(我不知道你有多少其他選擇)。

+0

我明白你說的是什麼,但我該如何爲該按鈕設置該屬性?因爲現在按鈕出現在UIAlertView.Sorry上,如果這是一個愚蠢的問題,但我仍然是一種newby。 – emiliomarin

+0

在UIAlertView委託方法alertView:clickedButtonAtIndex:中,您將獲得單擊按鈕的索引。您可以將該索引保存到一個屬性。 – rdelmar

+0

好吧,當我把所有的代碼放在一起時,它會說:「使用未聲明的標識符'randomNumber'」我必須在某處使用randomNumber創建一個變量嗎?如果是的話,在哪裏? – emiliomarin