методы делегата, не передающие данные во второй контроллер представления - PullRequest
0 голосов
/ 11 декабря 2011

Привет, мой делегат не передает изображение и некоторые строки моему второму навигационному контроллеру.Кто-нибудь может увидеть, что не так?Я создал ImageAndTextDelegate.h, PhotoEditViewController.h / .m и PreviewFrameViewController.h / .m.В основном после выбора некоторых изображений и ввода текста в фоторедакторе.Я хочу отправить данные в PreviewFrame, используя мои методы делегата.

//ImageAndTextDelegate.h
@protocol ImageAndTextDelegate

-(void)passImage:(UIImage*)image;
-(void)passMainText:(NSString*)maintext withSubText:(NSString*)subtext;

@end

// PhotoEditViewController.h #import "ImageAndTextDelegate.h"

@interface PhotoEditViewController : UIViewController<UINavigationControllerDelegate,

UIImagePickerControllerDelegate> {IBOutletUITextField * mainText;IBOutlet UITextField * subText;IBOutlet UIImageView * imageView;IBOutlet UIButton * previewPictureButton;}

@property (nonatomic,retain) UITextField *mainText;
@property (nonatomic,retain) UITextField *subText;
@property (nonatomic,retain) UIImageView *imageView;
@property (nonatomic,retain) UIButton *previewPictureButton;
@property (nonatomic,assign) IBOutlet id<ImageAndTextDelegate> delegate;

-(IBAction)previewPicture:(id)sender;

@end
//PhotoEditViewController.m
         #import "PhotoEditViewController.h"
         #import "PreviewFrameViewController.h"

         @implementation PhotoEditViewController
         @synthesize delegate;
         -(IBAction)previewPicture:(id)sender{
             PreviewFrameViewController* prvc = [[PreviewFrameViewController alloc]init];
             [delegate passImage:imageView.image];
             [delegate passMainText:mainText.text withSubText:subText.text];
             [self.navigationController pushViewController:prvc animated:YES];
         }
         - (void)viewDidLoad
         {
             [super viewDidLoad];
             // Do any additional setup after loading the view from its nib. 
         }
//PreviewFrameViewController.h
#import <UIKit/UIKit.h>
#import "ImageAndTextDelegate.h"

@interface PreviewFrameViewController : UIViewController<ImageAndTextDelegate>{
    IBOutlet UIImageView *myImage;
    IBOutlet UILabel *main;
    IBOutlet UILabel *sub;
}

@property (nonatomic,retain) UIImageView *myImage;
@property (nonatomic,retain) UILabel *main;
@property (nonatomic,retain) UILabel *sub;

@end
//PreviewFrameViewController.m
#import "PreviewFrameViewController.h"
#import "PhotoEditViewController.h"

@implementation PreviewFrameViewController

@synthesize myImage,main,sub;

-(void)passImage:(UIImage *)image{
    myImage.image = image;
}

-(void)passMainText:(NSString *)maintext withSubText:(NSString *)subtext{
    main.text = maintext;
    sub.text = subtext;
}
-(IBAction)goBack:(id)sender{
    [self dismissModalViewControllerAnimated:YES];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    PhotoEditViewController* pvc = [[PhotoEditViewController alloc]init];
    pvc.delegate = self;
}

1 Ответ

0 голосов
/ 11 декабря 2011

Таким образом, ваш PhotoEditViewController создает и представляет PreviewFrameViewController.

Затем в своем viewDidLoad ваш PreviewFrameViewController создает свой собственный PhotoEditViewController и устанавливает делегат этого экземпляра для себя.

Итак, теперь у вас есть два PhotoEditViewControllers, а у первого все еще нет делегата.(Что приводит к вопросу о том, зачем вам нужен шаблон делегата здесь для начала?)

Самый прямой способ сделать то, что вам, кажется, нужно, это (в вашем PhotoEditViewController):

-(IBAction)previewPicture:(id)sender{

    PreviewFrameViewController* prvc = [[PreviewFrameViewController alloc]init];
    [prvc passImage:imageView.image];
    [prvc passMainText:mainText.text withSubText:subText.text];
    [self.navigationController pushViewController:prvc animated:YES];

    // You could have set self.delegate here, but I'm not sure why you need that now
    // but if for some reason you do: self.delegate = prvc;

    // and if you aren't using ARC: [prvc release];

}

Надеюсь, это имеет смысл?

...