页面切换、跳转方法

目录:
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是没有导航栏的,需要在根视图添加导航栏,具体方法如下图:


页面切换、跳转方法_第1张图片
添加导航栏

你可能感兴趣的:(页面切换、跳转方法)