If you are in the iOS 5 world and want to jump between different view controllers, you may need to view the controller limit . Or log in to WWDC 2011 Session 102 .
, , . .
Update:
, , . , . , viewDidLoad :
- (void)viewDidLoad
{
[super viewDidLoad];
_model = [[MyModel alloc] init];
OneViewController *controller = [[OneViewController alloc] initWithNibName:@"OneViewController" bundle:nil];
controller.model = _model;
[self addChildViewController:controller];
[self configureChild:controller];
[self.view addSubview:controller.view];
[controller didMoveToParentViewController:self];
[self updateTitles:controller];
}
configureChild . UIView, IB ( childView), , , :
- (void)configureChild:(UIViewController *)controller
{
controller.view.frame = self.childView.frame;
}
, . , . , :
- (IBAction)barButtonTouchUpInside:(id)sender
{
UIViewController *currentChildController = [self.childViewControllers objectAtIndex:0];
if ([currentChildController isKindOfClass:[OneViewController class]])
{
TwoViewController *newChildController = [[TwoViewController alloc] initWithNibName:@"TwoViewController" bundle:nil];
newChildController.model = _model;
[self transitionFrom:currentChildController To:newChildController];
}
else if ([currentChildController isKindOfClass:[TwoViewController class]])
{
OneViewController *newChildController = [[OneViewController alloc] initWithNibName:@"OneViewController" bundle:nil];
newChildController.model = _model;
[self transitionFrom:currentChildController To:newChildController];
}
else
NSAssert(FALSE, @"Unknown controller type");
}
( , ):
- (void)transitionFrom:(UIViewController *)oldController To:(UIViewController *)newController
{
[self addChildViewController:newController];
[self configureChild:newController];
[self transitionFromViewController:oldController
toViewController:newController
duration:0.5
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
[self updateTitles:newController];
}
completion:^(BOOL finished){
[oldController willMoveToParentViewController:nil];
[oldController removeFromParentViewController];
[newController didMoveToParentViewController:self];
}];
}
, . .
- (void)updateTitles:(UIViewController *)controller
{
if ([controller isKindOfClass:[OneViewController class]])
{
self.navigationItemTitle.title = @"First View Controller";
self.barButton.title = @"Two";
}
else if ([controller isKindOfClass:[TwoViewController class]])
{
self.navigationItemTitle.title = @"Second View Controller";
self.barButton.title = @"One";
}
else
NSAssert(FALSE, @"Unknown controller type");
}
, . , , , .
, " UIViews": , ,
- (void)viewDidLoad
{
[super viewDidLoad];
_model = [[MyModel alloc] init];
_controller0 = [[OneViewController alloc] initWithNibName:@"OneViewController" bundle:nil];
_controller0.model = _model;
[self addChildViewController:_controller0];
[self configureChild:_controller0];
[_controller0 didMoveToParentViewController:self];
_controller1 = [[OneViewController alloc] initWithNibName:@"OneViewController" bundle:nil];
_controller1.model = _model;
[self addChildViewController:_controller1];
[self configureChild:_controller1];
[_controller1 didMoveToParentViewController:self];
_currentChildController = _controller0;
[self.view addSubview:_currentChildController.view];
[self updateTitles:_currentChildController];
}
- (void)transitionFrom:(UIViewController *)oldController To:(UIViewController *)newController
{
[self transitionFromViewController:oldController
toViewController:newController
duration:0.5
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
[self updateTitles:newController];
}
completion:^(BOOL finished){
_currentChildController = newController;
}];
}
- (IBAction)barButtonTouchUpInside:(id)sender
{
UIViewController *newChildController;
if ([_currentChildController isKindOfClass:[OneViewController class]])
{
newChildController = _controller1;
}
else if ([_currentChildController isKindOfClass:[TwoViewController class]])
{
newChildController = _controller0;
}
else
NSAssert(FALSE, @"Unknown controller type");
[self transitionFrom:_currentChildController To:newChildController];
}
, , .