leo
leo

Reputation: 1011

how to associate view controller and xib file

When I create a uiviewcontroller from the "new file..." wizard with "create xib file" option, I can load it by just SomeViewController *view = [[SomeViewController alloc] init]. But when I rename the xib file name, this code stops working, even though the file owner in the xib is still the right view controller.

I found that I can only get the view up by calling initWithNib. I am just wondering what was linking the xib with the view controller behind the scene? Can I still use init to get the xib loaded after renaming the file?

Regards

Leo

Upvotes: 2

Views: 4108

Answers (1)

Caleb
Caleb

Reputation: 125017

I can load it by just SomeViewController *view = [[SomeViewController alloc] init].

You can, but (IMO) you shouldn't. The designated initializer for UIViewController is -initWithNibName:bundle:. You might implement an -init method in your own view controller that calls [super initWithNibName:nil bundle:nil], but I think the code is clearer if you stick with the same name.

Also, make sure you read the documentation for UIViewController, particularly the discussion, which says:

If you specify nil for the nibName parameter, you must either override the loadView method and create your views there or you must provide a nib file in your bundle whose name (without the .nib extension) matches the name of your view controller class.

This is why the view controller will load a .xib file that has the same name as the view controller's class (or the name returned by the -nibName method, as explaind a little further on in the docs).

In short, UIViewController is functioning exactly as documented.

Upvotes: 4

Related Questions