当属性设置得太早时,UIImageView不显示图像

时间:2011-02-10 07:23:10

标签: iphone objective-c

我想在UIView内显示一张图片。在Interface Builder中,UIView是根,UIImageView是其子。

视图连接到视图控制器的视图插座,图像视图连接到图像视图插座:

@property (nonatomic, retain) IBOutlet UIImageView *imageView;

如果我尝试在UIImageView可见之前设置它的图像属性,则图像不会显示。

TestView *testView = [[TestView alloc] initWithNibName:@"TestView" bundle:nil];
testview.imageView.image = [logos objectAtIndex:indexPath.row];
[self.navigationController pushViewController:testView animated:YES];

但是,如果我将图像传递给控制器​​并在viewDidLoad中设置图像属性,则图像将变为可见。

TestView *testView = [[TestView alloc] initWithNibName:@"TestView" bundle:nil];
testview.image = [logos objectAtIndex:indexPath.row];
[self.navigationController pushViewController:testView animated:YES];

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

是什么导致图像在第一种情况下不显示?

1 个答案:

答案 0 :(得分:8)

UIViewController的{​​{3}}方法的iOS文档声明:

  

...   您指定的nib文件不会立即加载。它是在第一次访问视图控制器的视图时加载的。如果要在加载nib文件后执行其他初始化,请覆盖viewDidLoad方法并在那里执行任务。 ...

没有立即加载nib / xib文件的结果(即它使用所谓的延迟加载)意味着当你使用TestView控制器时,imageView IBOutlet属性仍为零尝试在第一个示例中设置它。

在您的第二个示例中,您将在{<1}}中将其设置为加载nib / xib文件后的,因此它可以按预期工作。