设置viewcontroller bgcolor时未绘制ImageView图像

时间:2015-05-12 19:21:55

标签: ios objective-c uiimageview uiimage

遇到一个奇怪的问题。在我的HomeViewController.m文件的prepareForSegue方法中,我这样做:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender {

    StarViewController *nextViewController = segue.destinationViewController;

    nextViewController.title = segue.identifier;

    if ([segue.identifier isEqualToString:@"redDwarfSegue"]) {

        //nextViewController.view.backgroundColor = [UIColor redColor];

        nextViewController.starImage = [UIImage imageNamed:@"image1"];

     } else {

        nextViewController.view.backgroundColor = [UIColor blueColor];

        nextViewController.starImage = [UIImage imageNamed:@"Image2"];

    }
}

在StarViewController.h中,我有一个名为starImage的UIImage类型的属性,在上面的代码中引用。

最后,在我的StarViewController.m文件中,我有一个名为starImageView的UIImageView类型的属性,我所做的就是:

-(void) viewDidLoad {

    self.starImageView.image = self.starImage;
    self.starImageView.contentMode = UIViewContentModeScaleAspectFill;
}

在我的HomeViewController.m的prepareForSegue方法中,我故意注释掉这一行:

        //nextViewController.view.backgroundColor = [UIColor redColor];

当epiged进入viewcontroller时,image1会很好地加载,但是image2却没有。我看到的只是蓝色背景色。如果我要注释掉bg颜色的设置或翻转这两行的顺序:

        nextViewController.view.backgroundColor = [UIColor blueColor];

        nextViewController.starImage = [UIImage imageNamed:@"Image2"];

对此:

        nextViewController.starImage = [UIImage imageNamed:@"Image2"];

        nextViewController.view.backgroundColor = [UIColor blueColor];

然后它工作,图像显示正确。这是一个错误吗?或者这是操作和视图的顺序以及如何在屏幕上绘制事物的问题?如果这还不够清楚,我很难道歉,我很难说出具体问题是什么。

谢谢!

1 个答案:

答案 0 :(得分:2)

我相信这种情况正在发生,因为当您访问StarViewController的视图(使用nextViewController.view.backgroundColor)时,这会导致执行viewDidLoad。如果设置图像值的行在该行之后,那么当viewDidLoad运行时,starImage将为nil。