Напишите UIViewController, который управляет вашими 2 VC и переходами между MKMapView и UITableView в ответ на сегментированный элемент управления.Сначала настройте перо для этого нового VC в Интерфейсном Разработчике: добавьте UISegementedControl и простой UIView (contentView).Файл интерфейса содержит ссылки на элементы пользовательского интерфейса и 2 VC + действие для ответа на сегментированный элемент управления:
//
// MapAndTableViewController.h
//
#import <UIKit/UIKit.h>
#import "MyMapViewController.h"
#import "MyTableViewController.h"
@interface MapAndTableViewController : UIViewController {
IBOutlet UISegmentedControl* segmentedControl;
IBOutlet UIView* contentView;
UIViewController* firstVC;
UIViewController* secondVC;
}
-(IBAction) valueChanged:(UISegmentedControl*) sender;
@end
Реализация:
//
// MapAndTableViewController.m
//
#import "MapAndTableViewController.h"
@implementation MapAndTableViewController
-(IBAction) valueChanged:(UISegmentedControl*) sender {
if (sender.selectedSegmentIndex == 0) {
[UIView transitionFromView:[contentView.subviews lastObject] toView:firstVC.view duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
}
if (sender.selectedSegmentIndex == 1) {
[UIView transitionFromView:[contentView.subviews lastObject] toView:secondVC.view duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
}
}
-(void)awakeFromNib {
firstVC = [[MyMapViewController alloc] initWithNibName:@"MyMapViewController" bundle:nil];
secondVC = [[MyTableViewController alloc] initWithNibName:@"MyTableViewController" bundle:nil];
}
- (void)viewDidLoad {
[super viewDidLoad];
[contentView addSubview:firstVC.view];
}
- (void)dealloc {
[firstVC release];
[secondVC release];
[super dealloc];
}
@end
В методе valueChanged
вы заменяете текущее представление и анимируете переход.
Обратите внимание, что представления firstVC.view
и secondVC.view
создаются при первом доступе к свойству view каждого VC.