0

で「OK」ボタンを押すとUIAlertView元に戻りたい のですUITableViewControllerが、クリックしても元に戻りません。

QuizViewController.h

@interface QuizViewController : UIViewController <UIAlertViewDelegate> { 
}

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

@end

QuizViewController.m

-(IBAction)buttonWasClicked:(id)sender{

UIButton *resultebutton= (UIButton*)sender;

if (qCount < totalQuestions) {

    id prevQuestion =  [appDelegate.qs objectAtIndex:qCount-1];
    NSString * correctAns = [prevQuestion labelAns];

    if ([correctAns isEqualToString:resultebutton.titleLabel.text]) 
        myScore += 5;            

    NSLog(@"The button title is %@ ", correctAns);
    NSLog(@"The button title is %@ ", resultebutton.titleLabel.text);

    NSString *finishingStatement = [[NSString alloc] initWithFormat:@"Your score so far is %i!", myScore];
    theScore.text = finishingStatement;



    id nextQuestion = [appDelegate.qs objectAtIndex:qCount];

 quizLbl.text = [nextQuestion labelQn];
    headerLbl.text = [nextQuestion labelHeader];

 [qBtn setTitle:[nextQuestion labelBtn] forState:UIControlStateNormal];
 [qBtnB setTitle:[nextQuestion labelBtnB] forState:UIControlStateNormal];
 [qBtnC setTitle:[nextQuestion labelBtnC] forState:UIControlStateNormal];
 [qBtnD setTitle:[nextQuestion labelBtnD] forState:UIControlStateNormal];



 qCount++;

 }


 else {

     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Results" message:[[NSString alloc] initWithFormat:@"Your total score will be %i!", myScore]
                                                    delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];

     [alert show];


 }

}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    QuizTableViewController *quizTable = [self.storyboard instantiateViewControllerWithIdentifier:@"quizTable"];

    [self.navigationController presentModalViewController:quizTable animated:YES]; 
}
4

4 に答える 4

0

このコードを使用して戻ります。

[self.navigationController popViewControllerAnimated:YES];
于 2012-07-30T08:43:50.143 に答える
0

コールバックされない理由は、UIAlertViewデリゲートをに設定しているためnilです。selfアラートが閉じられたときにそのオブジェクトがコールバックを受信するには、次のように設定する必要があります。

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Results"
                                                message:[[NSString alloc] initWithFormat:@"Your total score will be %i!", myScore]  
                                               delegate:self
                                      cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
于 2012-07-30T07:44:52.073 に答える
0

これを使って:

    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
        if([alertView.title isEqualToString:@"the_title_of_your_alert"]){
           //above line is to identify your alert, if you have several ones
           if(buttonIndex == 0)
               //do this
           else if (buttonIndex == 1)
               //do that
           else if //bla bla bla, find the button, and if it is your "ok" button, 
                   //go to your TableViewController
        }
    }

また、alertViewのデリゲートはそのように宣言するべきではなく、デリゲートメソッドを実装するだけです。

于 2012-07-30T07:39:34.893 に答える
0

次のように .h ファイルでデリゲート メソッドを宣言しないでください。 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
代わりに、次のように alertView で delegate:self を指定します。

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Results" message:[[NSString alloc] initWithFormat:@"Your total score will be %i!", myScore]
                                                    delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];

のように.hファイルで宣言します

@interface QuizViewController : UIViewController<UIAlertViewDelegate>

そして、[self.navigationController presentModalViewController:quizTable animated:YES]; button.index=0 をクリックしてデリゲート メソッドで使用します。

于 2012-07-30T07:37:28.373 に答える