【问题标题】:delegate methods not passing data over to second view controller委托方法不将数据传递给第二个视图控制器
【发布时间】:2011-12-11 14:54:34
【问题描述】:

您好,我的代表没有将图像和一些字符串传递给我的第二个导航控制器。任何人都可以看到有什么问题吗?我创建了 ImageAndTextDelegate.h 、 PhotoEditViewController.h/.m 和 PreviewFrameViewController.h/.m 。基本上在选择一些图像并在 photoedit 中输入一些文本之后。我想使用我的委托方法将数据发送到 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>{ IBOutlet UITextField *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;
}

【问题讨论】:

    标签: objective-c model-view-controller delegates protocols viewcontroller


    【解决方案1】:

    所以您的 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];
    
    }
    

    我希望这是有道理的?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多