Dan Waterbly
Dan Waterbly

Reputation: 850

UIStoryboard application and common background image

I have an iOS application which uses an UIStoryboard to control its flow. I would like to have all my views defined in the UIStoryboard to all share a common background. Is there a way I can do this without having to add an UIImageView control to each View?

I have tried this below but it causes my application crash with a stack overflow error:

-(void)viewDidLoad
{
    [super viewDidLoad]; 
    UIImage *image = [UIImage imageNamed:@"MyBackgroundImage.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    [self.view addSubview:imageView];
    [self.view sendSubviewToBack:imageView];
}

Is there a better way to do this? What is the best way to handle this kind of theming in iOS applications?

Upvotes: 1

Views: 436

Answers (3)

Dan Waterbly
Dan Waterbly

Reputation: 850

It turns out that the code I posted above is working perfectly. My solution was the same as Mark Adams' suggestion: Subclass UIViewController, override -viewDidLoad, create and set the imageView, and use the new subclass as my viewController.

I think I may have inadvertently set my new subclass to an incorrect control in Interface Builder which caused my initial solution not to work correctly.

Upvotes: 0

Mark Adams
Mark Adams

Reputation: 30846

Subclass UIViewController and override -viewDidLoad to create your image and set it as the background of the view. Now make the view controllers that require this background image subclasses of your custom view controller instead of UIViewController.

Upvotes: 5

Dana K
Dana K

Reputation: 380

In your ViewDidLoad:

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 100, 50)];
imgView.image = [UIImage imageNamed:@"image.png"];
[self.view addSubview: imgView];
[self.view sendSubviewToBack:imageView];

Should do the trick.

Upvotes: 0

Related Questions