4
votes

I'm trying to replace a UIViewController root view with a subclassed UIView.

In the iPhone SDK's UIViewController Class Reference, within it's Overview section, this is stated:

You use each instance of UIViewController to manage a full-screen view. For a simple view controller, this entails managing the view hierarchy responsible for presenting your application content. A typical view hierarchy consists of a root view—a reference to which is available in the view property of this class—and one or more subviews presenting the actual content.

Following the link on the view property it then states:

If your view controller does not have an associated view controller, you should override the loadView method and use it to create the root view and all of its subviews.

If this code was placed in loadView would it create the root view assuming I was using my own subclass of UIView called MyView:

self.view = [MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

Thanks // :)

2

2 Answers

4
votes

You are correct. The loadView function is called when the view needs to be displayed, and the viewController's view property is the view that is displayed when using functions like presentModalViewController:animated:. If you are loading your view from a NIB instead of using loadView, then just change the class of the view to your custom subclass in the properties tab for that view.

1
votes

You should note that anything you set the view property to gets retained. So you should either use

self.view = [[[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];

or

MyView *v = [[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
self.view = v;
[v release];

to balance that out.