2012-05-21 2 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과 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 
     } 
    } 
} 

문제에서 모든 코드를 호출하도록되어 있다는 점이다 : 나는 alertView 하나에 @selector를 변경 그래서

- (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]; 

} 

지금은 누를 때 모든 코드를 실행하는 버튼은 저에게 SIGABRT 오류를줍니다. 어떤 아이디어? 도와 주셔서 감사합니다.

+0

"alertView"라는 선택기가 없거나 표시되지 않습니다. – rdelmar

+0

단추를 누를 때 모든 코드가 작동하도록하려면 어떻게해야합니까? uialertview 내부에 있어야하기 때문에? – emiliomarin

+0

당신이 지금 무엇을하고 있는지 잘 모르겠습니다 - alertView : clickedButtonAtIndex : 메서드는 버튼을 클릭 할 때 UIAlert에 의해 호출되는 위임 메서드입니다. 명시 적으로 호출하지 않습니다. 타이머 메소드에서 수행). 서로 다른 메서드에서 사용할 수 있도록 속성 buttonTitle을 만들어야합니다. 위임 메서드에 있어야하는 유일한 것은 self.buttonTitle = [alertView buttonTitleAtIndex : buttonIndex]입니다. 그럼 내가 대답 한 것처럼 buttonTitle을 사용할거야. – rdelmar

답변

0

사용자가 버튼을 선택하면 버튼의 고유 한 값 (제목이나 태그 등)을 속성에 입력해야합니다. 당신이이 있으면, 당신은 당신의 난수 정의 앞에 if 문을 넣을 수 있습니다 -이 같은 :

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) 

을에서 다른-경우 3 스위치 문에서 선택 3로 시작하는 것을 보장합니다 문 거기에서 올라가서 (나는 당신이 얼마나 많은 선택을했는지 모른다).

+0

당신이 말한 것을 이해 합니다만, 어떻게 그 버튼의 속성을 만들 수 있습니까? 버튼이 UIAlertView에 표시되기 때문에. 바보 같은 질문이긴하지만 여전히 newby입니다. – emiliomarin

+0

UIAlertView 대리자 메서드 인 alertView : clickedButtonAtIndex :에서 클릭 한 단추의 인덱스를 가져옵니다. 이 인덱스를 속성에 저장할 수 있습니다. – rdelmar

+0

좋아, 내가 함께 모든 코드를 넣어라고 : "선언되지 않은 식별자 'randomNumber'의 사용"나는 어딘가에 randomNumber와 변수를 만들어야하나요? 그렇다면 어디에서? – emiliomarin