在视图控制器之间传递图像

时间:2012-08-20 18:14:38

标签: objective-c ios image cocoa-touch

首先,我是XCode和编程的新手,我的英语并不完美。 我有2个视图控制器,L1ViewController和ImageViewController。在L1ViewController中,我有几个按钮,图像为背景。我要做的是当您单击按钮时,操作会将密码和图像传递给图像视图控制器。在ImageViewController中,我有一个UITextfield和一个UIImageView。传递密码字符串工作正常。但传递图像似乎比我想象的更难。 UIImageView不显示图像。

在我的L1ViewController.h中,我创建了一个

    -(IBAction)img1; 

在我的L1ViewController.m中,这是传递图像和密码字符串的代码:

    -(IBAction)img1;
{
ImageViewController *img = [[ImageViewController alloc] initWithImage:[UIImage imageNamed:@"myimage.jpg"] AndAnswerString:@"mypassword"];   
[self presentModalViewController:img animated:NO];
}

在我的ImageViewController中,我有这个代码来接收字符串和图像:

-(id)initWithImage:(UIImage *)inImage AndAnswerString:(NSString *)inAnswerString
{
    if (self = [super init])
    {
        [inImage release];
        [self setImage:inImage];
        [self setAnswerString:inAnswerString];

    }
    return self;
} 
-(void)setImage:(UIImage *)inImage
{
[inImage release];
[logoField setImage:inImage]; 
}

-(void)setAnswerString:(NSString *)inAnswerString
{
answerString = inAnswerString;
}

在我的ImageViewController.h中我

@interface ImageViewController : UIViewController { 
IBOutlet UITextField *answerField;
IBOutlet UIImageView *logoField;

NSString *answerString;
 }

@property (nonatomic, retain)NSString *logo;
-(id)initWithImage:(UIImage *)inImage AndAnswerString:(NSString *)inAnswerString;
-(void)setImage:(UIImage *)inImage;
-(void)setAnswerString:(NSString *)inAnswerString;

-(IBAction)enterAnswer;
-(IBAction)back;

为什么我的answerstring工作正常,但显示我的ImageViewController没有图像? 再一次,我是XCode的新手,也许这只是一个愚蠢的错误。 在此先感谢!

3 个答案:

答案 0 :(得分:1)

初始化视图控制器时,尚未加载视图。 (这是在调用viewDidLoad:方法之前发生的。)保存字符串是有效的,因为您没有尝试将其直接放入answerField,但是,对于图像,您正在尝试更新{{ 1}}太早了。

如果文字有效,您必须在某处将代码logoField分配给answerString

答案 1 :(得分:0)

您在使用之前已经发布了“inImage”,因此请删除代码“[inImage release];”从所有功能中,在使用该图像后将其释放

所以新代码是......以下

   -(id)initWithImage:(UIImage *)inImage AndAnswerString:(NSString *)inAnswerString
{
if (self = [super init])
{
    //[inImage release];
    [self setImage:inImage];
    [self setAnswerString:inAnswerString];

}
return self;
} 
-(void)setImage:(UIImage *)inImage
{
[logoField setImage:inImage]; 
[inImage release];
}

答案 2 :(得分:0)

好吧..我认为你必须把它作为一个id传递而不是因为UIImage女巫不起作用: 在你的secondUIViewController.h中:

@property (nonatomic, strong) id image;
在secondViewController.m中

@synthesize image = _image;