UIImage和prepareforSegue不能传递图像

5

我希望在第二个视图中出现这张图片,但是我无法看到任何照片,我不知道为什么。我做了以下操作:

FirstClassViewController.m:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        if ([[segue identifier] isEqualToString:@"ShowCover"]) {
            MovieImageViewController *photo = [segue destinationViewController];       
            photo.cover.image = [UIImage imageNamed:@"helloWorld.jpg"];
            }
         }

SecondClassViewController.m:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self cover]; 
}

封面是我在SecondClassViewController上创建的一个属性UIImageView

2个回答

6
当您调用prepareForSegue:sender:时,目标视图控制器的输出口还未设置。这意味着您的photo.cover属性仍然为nil。
您可以在MovieImageViewController上创建一个UIImage属性,并执行以下操作:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        if ([[segue identifier] isEqualToString:@"ShowCover"]) {
            MovieImageViewController *photo = [segue destinationViewController];       
            photo.image = [UIImage imageNamed:@"helloWorld.jpg"];
        }
}

在你的-viewDidLoad方法中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.cover.image = self.image;
}

但是 self.image 不起作用,因为它不是一个属性。 - user1911
翻译:photo.image不应该存在,因为image不是一个属性,属性应该是cover,并且它在MovieImage中。 - user1911
1
这就是为什么我说过:“你所能做的是创建一个UIImage属性…” - Bruno Koga
为什么UIImage属性不是nil?这只是因为它不是一个outlet吗?还是与视图层次结构有关的问题? - halbano
它最初是空的,但在 prepareForSegue 中你会设置它 (photo.image = ...)。因此,在 -viewDidLoad 中,你将 cover.image 设置为 self.image - Bruno Koga

2
我猜“cover”是您的MovieImageViewController类的图像视图属性?如果是这样,请不要这样做。
您应该将其他视图控制器的视图视为私有。
相反,在您的MovieImageViewController类中设置一个图像属性。在prepareForSegue方法中设置它,然后在MovieImageViewController的viewWillAppear:animated方法中将图像安装到您的“cover”图像视图中。问题解决了。
编辑:澄清一下
在MovieImageViewController类的头文件(.h)中添加以下内容:
@interface MovieImageViewController

//This property is the line to add
@property (nonatomic, strong) UIImage *coverImage;

//your other stuff goes here.

@end

然后在您的.m文件中:

@implementation MovieImageViewController

- (void) viewWillAppear: animated
{
  [super viewWillAppear: animated];
  //Add the following code to your viewWillAppear:animated method
  if (self.coverImage != nil)
     self.cover.image = self.coverImage;
}

@end

是的,封面是我的MovieImageVC的UIImageView属性,但是很抱歉我不明白你的意思。 - user1911

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接