美文网首页iOS开发
页面切换、跳转方法

页面切换、跳转方法

作者: PZcoder | 来源:发表于2016-06-06 13:30 被阅读266次

    目录:
    1、push方法
    2、模态视图
    3、UITableBar标签栏使用
    4、获取要跳转页面的几种方式

    1.UINavigationController的push方式

    //1.跳转到新的VC
    /*
    *参数1.要切换的VC
    *参数2.是否带动画效果
    */
     self.navigationController pushViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#>
    
    //2.返回到上一个VC
    self.navigationController popViewControllerAnimated:<#(BOOL)#>
    
    //3.返回到push过的页面(先找到此页再返回)
    for (UIViewController *vc in self.navigationController.viewControllers)
    {
        if([vc isKindOfClass:[FundProMainViewController class]])
        {
            [self.navigationController popToViewController:vc animated:YES];
        }
    }
    
    //4.返回到根视图控制器(返回到根视图,少用)
    self.navigationController popToRootViewControllerAnimated:<#(BOOL)#>
    
    //5.StoryBoard中连线跳转,可以push、present等方式。
    

    2.模态视图(modal)

    显示新页面
    self presentViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>
    /*
    *参数1.要切换的VC
    *参数2.是否带动画效果
    *参数3.成功后想要做的相应操作(一般为nil)
    */
    返回上一个页面(即本页面消失)
    self dismissViewControllerAnimated:<#(BOOL)#> completion:<#^(void)completion#>
    /*
    *参数1.是否带动画效果
    *参数2.成功后想要做的相应操作(一般为nil)
    */
    

    模态视图详解:

    已经上传到Coding的demo地址:
    https://coding.net/u/Panzz/p/ModelViewControllerDemo/git
    一、主页面中相关代码

    //创建按钮,弹出视图(设置button属性及方法)
        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
        button.frame = CGRectMake(100, 60, 180, 60);
        [button setTitle:@"弹出模态视图" forState:UIControlStateNormal];
        [self.view addSubview:button];
        //添加button的点击事件
        [button addTarget:self action:@selector(tapBtn:) forControlEvents:UIControlEventTouchUpInside];
    
    //弹出模态视图按钮
    -(void)tapBtn:(UIButton *)sender{
        //获取storyboard
        UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    
        //有多个storyboard的时候必须先获取哪个名字的storyboard
        //通过storyboard获取VC 一个storyboard的时候用self.storyboard代替
    
    //获取要弹出的视图(storyboard中必须设置StoryboardId为modelVC)
        self.modelVC = [sb instantiateViewControllerWithIdentifier:@"modelVC"];
        //设置弹出样式
        self.modelVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        //模态展示modelVC
        [self presentViewController:self.modelVC animated:YES completion:^{
    //弹出视图成功后要做的事情(一般为nil)
            NSLog(@"弹出modelVC成功");
        }];
    }
    

    以上就是模态展示部分,下面介绍返回按钮(NavigationBar)

    二、模态展示的视图中的相关代码

        //定时器,定时关闭模态视图
        //    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(close) userInfo:nil repeats:YES];
        //创建一个navigationbar
        UINavigationBar *navBar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];
        [self.view addSubview:navBar];
        //创建一个item
        UINavigationItem *item = [[UINavigationItem alloc]initWithTitle:@"ModelVC"];
        navBar.items = @[item];
        
        UIBarButtonItem *button = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(close)];
        item.rightBarButtonItem = button;
    
    //定时关闭模态视图
    -(void)close{
        [self dismissViewControllerAnimated:YES completion:^{
            NSLog(@"关闭模态视图成功");
        }];
    }
    

    注意事项:
    通过模态(present方法)展示的视图没有导航栏,需要自己重新添加;
    而通过push出来的新视图是继承上一个视图的导航栏,不用自己重新添加。

    3.UITableBar标签栏实现页面之间的并列切换(平行切换)

    //首先要在AppDelegate.m中设置根视图控制器
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
     {
        self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
    
        //初始化标签栏要存放的视图控制器
        FirstViewController *firstVC = [[FirstViewController alloc]init];
        SecondViewController *secondVC = [[SecondViewController alloc]init];
        ThirdViewController *thirdVC = [[ThirdViewController alloc]init];
    
        //创建标签栏控制器
        UITabBarController *tabbarControl = [UITabBarController new];
    
        //将各标签对应的视图控制器放入标签栏中
        tabbarControl.viewControllers = @[firstVC,secondVC,thirdVC];
    
         //指定标签栏默认选中的标签
        tabbarControl.selectedIndex = 0;
    
          //将标签栏作为应用的跟视图控制器
        self.window.rootViewController = tabbarControl;
    
        return YES;
    }
    

    4、获取要跳转页面的几种方式

    1)手写代码方式

    #import "FirstVC.h"
    
    - (void)goNextPageFirst
    {
        FirstVC *vc = [[FirstVC alloc] init];
        [self.navigationController pushViewController:vc animated:YES];
    }
    
    //push过来默认带导航栏、屏幕背景默认黑色。
    

    2)Xib方式

    #import "XibViewController.h"
    
    - (void)goNextPageFromXib
    {
        XibViewController *vc = [[XibViewController alloc]initWithNibName:@"XibViewController" bundle:nil];
        
        [self.navigationController pushViewController:vc animated:YES];
    }
    

    注意:此方式跳转失败多数原因是目标VC名称有误,另外,更改了类名后,需要更改相对应的字符串。

    3)StoryBoard方式

    - (void)goNextPageFromStoryBoard
    {
        //如果有多个StoryBoard,使用此方法获取当前的
    //    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        
        //如果只有一个,直接使用即可
        DetailVC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailVC"];
        
        [self.navigationController pushViewController:vc animated:YES];
    }
    

    注意:默认storyboard是没有导航栏的,需要在根视图添加导航栏,具体方法如下图:


    添加导航栏

    相关文章

      网友评论

        本文标题:页面切换、跳转方法

        本文链接:https://www.haomeiwen.com/subject/uymcdttx.html