委派问题解雇多个视图控制器

时间:2012-08-03 23:15:41

标签: ios uiviewcontroller uitableview modalviewcontroller

我问过一个关于以前解雇多个视图控制器的问题,我给出的答案以及我在其他地方找到的可能的解决方案都未能达到预期的效果。我已经用我设立代表团的方式缩小了我的问题。代码如下,我真的很感激任何反馈。

我的完整项目可以在这里下载:https://www.yousendit.com/download/TEhWckhYQVNYSHpIRHNUQw

感谢。

//
//  QuestionViewController.h
//  learningTheRopes1
//
//  Created by James Ulle on 7/18/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "Question.h"
#import "AnswerViewController.h"

@interface QuestionViewController : UIViewController <AnswerViewControllerDelegate>

@property (weak, nonatomic) IBOutlet UILabel *currentQuestionDisplay;

@property (weak, nonatomic) IBOutlet UITextField *userAnswerTextField;

@property (nonatomic, strong) Question *currentQuestion;

- (IBAction)dismissKeyboard:(id)sender;

- (void)dismissQVC;

@end

    //
    //  QuestionViewController.m
    //  learningTheRopes1
    //
    //  Created by James Ulle on 7/18/12.
    //  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
    //

    #import "QuestionViewController.h"

    @interface QuestionViewController ()

    @end

    @implementation QuestionViewController

    @synthesize currentQuestionDisplay;
    @synthesize userAnswerTextField;
    @synthesize currentQuestion;

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        AnswerViewController *avc = [segue destinationViewController];
        [avc setCurrentQuestion:currentQuestion];
        [avc setUserAnswer:[userAnswerTextField text]];
    }

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.currentQuestionDisplay setText:[currentQuestion question]];

    // Do any additional setup after loading the view.
}

- (void)viewDidUnload
{
    [self setCurrentQuestionDisplay:nil];
    [self setUserAnswerTextField:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)dismissKeyboard:(id)sender {
    [userAnswerTextField resignFirstResponder];
}

- (void)dismissQVC {
    NSLog(@"Dismiss QVC");
    [self.navigationController popViewControllerAnimated:NO];
}

@end

    //
//  AnswerViewController.h
//  learningTheRopes1
//
//  Created by James Ulle on 7/18/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "Question.h"

@protocol AnswerViewControllerDelegate <NSObject>
- (void)dismissQVC;
@end

#import "QuestionViewController.h"

@interface AnswerViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *displayCurrentAnswer;

@property (nonatomic, strong) Question *currentQuestion;

@property (nonatomic, strong) NSString *userAnswer;

@property (nonatomic, weak) id <AnswerViewControllerDelegate> delegate;

- (IBAction)dismissAnswerVC:(id)sender;

@end

    //
//  AnswerViewController.m
//  learningTheRopes1
//
//  Created by James Ulle on 7/18/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "AnswerViewController.h"

@interface AnswerViewController ()

@end

@implementation AnswerViewController

@synthesize displayCurrentAnswer;
@synthesize currentQuestion;
@synthesize userAnswer;
@synthesize delegate;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    if([userAnswer isEqualToString:currentQuestion.answer]) {
        [self.displayCurrentAnswer setText:@"You are correct!"];
    }
    else {
        [self.displayCurrentAnswer setText:@"You are wrong!"];
    }

    // Do any additional setup after loading the view.
}

- (void)viewDidUnload
{
    [self setDisplayCurrentAnswer:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)dismissAnswerVC:(id)sender {
    [self dismissViewControllerAnimated:YES completion:^{

        NSLog(@"Dismiss AVC");
        [[self delegate] dismissQVC];

    }];

}

@end

最后我的输出就是这个(这表明确实调用了完成块,但是没有发生代理回调给dimissQVC:

2012-08-03 19:04:34.235
learningTheRopes1[4165:f803] Dismiss AVC

1 个答案:

答案 0 :(得分:1)

在prepareForSegue方法中,您错过了这一行:

avc.delegate = self;