I have an image I want to display inside a UIView. In Interface Builder, the UIView is the root and a UIImageView is its child.
The view is connected to view controller’s view outlet, and the image view is connected to the image view outlet:
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
If I try to set the image property of UIImageView before it’s visible, the image doesn’t show up.
TestView *testView = [[TestView alloc] initWithNibName:@"TestView" bundle:nil];
testview.imageView.image = [logos objectAtIndex:indexPath.row];
[self.navigationController pushViewController:testView animated:YES];
If, however, I pass the image to the controller and set the image property in viewDidLoad, the image becomes visible.
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;
}
What is causing the image to not show up in the first scenario?
The iOS documentation for a
UIViewController‘s initWithNibName:bundle: method states that:A consequence of the nib/xib file not being loaded immediately (i.e. it uses so called lazy loading) means that the imageView
IBOutletproperty in your TestView controller is still nil when you try to set it in your first example.In your second example you are setting it in the
viewDidLoadwhich is called after the nib/xib file is loaded, and therefore it works as you expect.