iOS视图控制器的跳转方法

视图的跳转有很多的方式,本文主要选择常用的方式并将其分为普通的viewController和导航控制器navigationController两种来进行详细说明

一、普通视图控制器跳转

对于普通的视图控制器来说,都继承于viewController,这些视图控制器能够进行的跳转,有两种,一种是通过presentViewController方法,另外一种是通过storyboard中连线,形成一个segue进行跳转,但是总的来说,这两种跳转都是类似于modal出一个视图来,并没有压栈行为,所以,需要注意的是,这种跳转不能够连续进行,换句话说,当从一个视图控制器跳转到另外一个视图控制器,这时候如果还想跳转,那么只能是通过dissmissViewController方法跳转回来,而不能跳转到一个新的控制器。

1、首先介绍presentViewController方法

在viewController.m中

- (IBAction)presentViewController:(id)sender
{
    // 在storyboard中设置secondViewController的identifier为123
    SecondViewController *secondVc = [self.storyboard instantiateViewControllerWithIdentifier:@"123"];
    // 进行跳转
    [self presentViewController:secondVc animated:YES completion:nil];
}

很多开发人员在进行跳转的时候,如果是使用了storyboard结合进行跳转到第二个视图控制器,常常会发生这样的情况,本来是创建了一个类和storyboard中的视图控制器相关联,这个storyboard上面是拖拽好了很多UI控件的,但是通过这样的代码进行跳转却发现跳转出来的页面没有这些空间了,甚至出现了黑屏

- (IBAction)presentViewController:(id)sender
{
    SecondViewController *secondVc = [[SecondViewController alloc]init];
    // 进行跳转
    [self presentViewController:secondVc animated:YES completion:nil];
}

原因在于:虽然表面上是将storyboard与代码想关联,但是所谓的关联,是代码可以去调整storyboard,而storyboard对于代码创建的对象并没有什么直接关系,所以,实际上,跳转到的是一个刚刚创建的视图控制器对象,而不是在storyboard里面的视图控制器

解决方案就是利用storyboard的一个类方法来通过 storyboard ID 这个属性来获取到storyboard里面的控制器(当然,需要在storyboard里面去设置这个属性值)

2、利用segue进行跳转

需要将第一个视图控制器的一个button拖线连接到第二个视图控制器,然后在弹出的选项框中选择present(选择modal等也是可以的,根据特定的要求进行选择),这样点击button就可以进行跳转了

如果想进行一个传值的话,那么需要写上这些代码

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // 需要在storyboard里面设置segue的identifier
    if ([segue.identifier isEqualToString:@"123"]) {
        // destinationViewController表示segue将要跳转的视图控制器
        SecondViewController *secondVc = segue.destinationViewController;
        secondVc.data1 = self.textField1.text;
        secondVc.data2 = self.textField2.text;
    }
}

二、导航控制控制器跳转
导航控制器是视图控制器的子类,具有普通视图控制器没有的几个跳转方法,将他们从文档中摘录了出来

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; // Uses a horizontal slide transition. Has no effect if the view controller is already in the stack.
- (UIViewController *)popViewControllerAnimated:(BOOL)animated; // Returns the popped controller.
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; // Pops view controllers until the one specified is on top. Returns the popped controllers.
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; // Pops until there's only a single view controller left on the stack. Returns the popped controllers.

下面进行解释说明

1、跳转到下一个视图控制器(以压栈的方式)

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

2、跳回到上一个视图控制器(以出栈的方式)

- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

3、跳回到指定的视图控制器(以出栈的方式)

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

4、跳回到根视图控制器(以出栈的方式)

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值