iOS开发学习之多视图转换
1??主视图控制器需要操作两个视图控制器
#import <UIKit/UIKit.h> @class MenuViewController; @protocol MenuViewControllerDelegate <NSObject> - (void)menuViewDidSelected:(NSString *)identifier; @end @interface MenuViewController : UIViewController @property (weak, nonatomic) id<MenuViewControllerDelegate> delegate; // 选择菜单 - (IBAction)selectMenu:(UIButton *)sender; @end
#import "MenuViewController.h" @interface MenuViewController () @end @implementation MenuViewController // 选择了菜单项 - (IBAction)selectMenu:(UIButton *)sender { // 通过按钮的tag,告诉代理应该使用什么id去加载视图控制器 NSString *identifier; switch (sender.tag) { case 0: identifier = @"First"; break; case 1: identifier = @"Second"; break; case 2: identifier = @"Third"; break; } [_delegate menuViewDidSelected:identifier]; } @end
#import <UIKit/UIKit.h> #import "MenuViewController.h" #import "ActionViewController.h" @interface ViewController :UIViewController <MenuViewControllerDelegate> @property (weak, nonatomic) ActionViewController *actionController; @property (weak, nonatomic) MenuViewController *menuController; // 切换菜单视图 - (IBAction)toggleMenu:(id)sender; @end
#import "ViewController.h" @interface ViewController () { // 菜单视图是否显示 BOOL _menuViewIsShow; } @end @implementation ViewController // 根据菜单选择项设置当前操作的视图控制器,默认启动时,显示First视图控制器 - (void)setActionController:(ActionViewController *)actionController { // 操作视图控制器,每次的变化都是根据菜单按钮的选项来变化的,因此,操作视图控制器是不固定! // 1. 需要删除原有的操作视图控制器 // 1.1 将操作视图控制器的视图删除 [_actionController.view removeFromSuperview]; // 1.2 不再在视图控制器中显示 [_actionController willMoveToParentViewController:nil]; // 1.3 从主视图控制器中删除 [_actionController removeFromParentViewController]; // 2. 添加新的视图控制器 _actionController = actionController; [self addChildViewController:_actionController]; [_actionController willMoveToParentViewController:self]; [_actionController.view setFrame:self.view.bounds]; [self.view addSubview:_actionController.view]; } // 菜单视图控制器,始终存在于应用中 - (void)setMenuController:(MenuViewController *)menuController { if (_menuController == nil) { _menuController = menuController; // 1. 添加子视图控制器 [self addChildViewController:_menuController]; // 2. 让子视图控制器可以移入 [_menuController willMoveToParentViewController:self]; // 3. addSubView或者insertSubView [self.view insertSubview:_menuController.view atIndex:0]; } } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 在这里把绿色的视图控制器推送出来,替代当前的主视图 self.actionController = [self.storyboard instantiateViewControllerWithIdentifier:@"First"]; // 同时还需要把菜单视图控制器初始化 self.menuController = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"]; [self.menuController setDelegate:self]; _menuViewIsShow = NO; } // 切换菜单视图 - (IBAction)toggleMenu:(id)sender { // 需要知道,当前是否显示菜单视图 _menuViewIsShow = !_menuViewIsShow; // 显示菜单,或者隐藏菜单,我们需要做的是,修改ActionViewController视图的位置 CGSize size = self.view.bounds.size; CGPoint viewCenter; if (_menuViewIsShow) { // 显示菜单视图 viewCenter = CGPointMake(size.width + 120., size.height / 2); } else { // 隐藏菜单视图 viewCenter = CGPointMake(size.width / 2, size.height / 2); } [UIView animateWithDuration:0.2 animations:^{ // 设置操作视图控制器视图的位置 [_actionController.view setCenter:viewCenter]; }]; } #pragma mark - 菜单视图的代理方法 - (void)menuViewDidSelected:(NSString *)identifier { // 根据传入的identifier,从storyboard中获取想要的视图控制器 // 然后设置给操作视图控制器 // 需要自己做优化,如果前一个视图跟当前视图控制器,是同一个,就不要有操作了 self.actionController = [self.storyboard instantiateViewControllerWithIdentifier:identifier]; // 需要调整一下视图的位置,让视图靠右 CGSize size = self.view.bounds.size; CGPoint viewCenter = CGPointMake(size.width + 120, size.height / 2); [_actionController.view setCenter:viewCenter]; [self toggleMenu:nil]; } @end
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。