I have an app with 2 screens (MainViewController and AboutViewController). Upon the user clicking a button, I\'d like to load the AboutViewController screen, which is defin
With an About screen you probably just want to show a view and then dismiss it. So rather than use a whole new view controller you can just cover the current view.
Assuming you have an ivar
UIView *aboutUsView;
with the appropriate property.
In your view controller do:
[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items
[self.view addSubview:aboutUsView]; // Retains the view
[aboutUsView release];
To remove the view, say in an action connected to a button on the view, do:
[aboutUsView removeFromSuperview], aboutUsView = nil; // Releases the view
NSBundle loadNibNamed:
When you call [AboutViewController init]
, it's expected to call some form of [super init]
, which is a synonym for [UIViewController init]
. When this happens, your view controller will automatically look for a nib file called (in your case) AboutViewController.xib
. If it finds that file, it loads it's contents into your view controller for you.
So basically, all you need to do is initialize your view controller, and make sure it has the same name as the associated nib file.
If you wanted to load a nib file with a different name into your view controller, you could explicitly call initWithNibName:bundle: with the name of whichever nib file you like.
If the standard init (with a same-name nib file) isn't working for you, there are a couple things you could check.
UIViewController
subclass's init method does also call [super init]
UIViewController
subclass's init method