Note to googlers, this Q-A is now six years out of date!
As Micky below and others mention, this is now done on an everyday basis with Containers in iOS.
I have a ViewController which controls many subviews. When I click one of the buttons I initialize another viewcontroller and show it's view as the subview of this view. However the subview exceeds the bounds of the frame for subview and infact fills the entire screen.
What could be wrong? I presume the problem is that UIViewController's view has a frame (0,0,320,460) and hence fills the entire screen (though it receive's touch events only when touched within the subview frame bounds). How can I resize the frame to fit as subview.
In short, I need help adding a viewcontroller's view as a subview to another viewcontroller's view.
Thanks!
This answer is correct for old versions of iOS, but is now obsolete. You should use Micky Duncan's answer, which covers custom containers.
Don't do this! The intent of the
UIViewController
is to drive the entire screen. It just isn't appropriate for this, and it doesn't really add anything you need.All you need is an object that owns your custom view. Just use a subclass of
UIView
itself, so it can be added to your window hierarchy and the memory management is fully automatic.Point the subview NIB's owner a custom subclass of
UIView
. Add acontentView
outlet to this custom subclass, and point it at the view within the nib. In the custom subclass do something like this:(I'm assuming here you're using
initWithFrame:
to construct the subview.)Change the frame size of
viewcontroller.view.frame
, and then add to subview.[viewcontrollerparent.view addSubview:viewcontroller.view]
You must set the bounds properties to fit that frame. frame its superview properties, and bounds limit the frame in the view itself coordinate system.
Thanks to this guys I did it http://highoncoding.com/Articles/848_Creating_iPad_Dashboard_Using_UIViewController_Containment.aspx
Add UIView, connect it to header:
In - (void)viewDidLoad do this:
Enjoy
As of iOS 5, Apple now allows you to make custom containers for the purpose of adding a UIViewController to another UIViewController particularly via methods such as addChildViewController so it is indeed possible to nest UIViewControllers
EDIT: Including in-place summary so as to avoid link breakage
I quote:
...and:
Sample (courtesy of Apple docs) Adding another view controller’s view to the container’s view hierarchy
Use: