27
2017
09

控制Segue跳转的时机

在使用Segue的时候,我们会发现如果给一个button添加跳转到另一个controller的Segue后,只要点击这个button,就会直接跳转到指定的那个controller,这在有些时候是合理的,但是在一些特殊情况下,我们需要在跳转之前处理一些逻辑,然后根据处理结果选择是否跳转,例如:登录。
iOS提供了控制Segue是否立即跳转的方法:

shouldPerformSegueWithIdentifier:sender: 

阻止Segue跳转

  1. 创建一个Single View Application,在storyboard中添加两个View Controller,第一个上添加个button,并为这个button添加一个指向另一个View Controller的Segue,Segue的类型为Present Modally,如下图所示:
    这里写图片描述
    运行程序,此时点击不跳转按钮会进行跳转:
    这里写图片描述
    为了阻止跳转,我们通过shouldPerformSegueWithIdentifier:sender:方法。首先,点击Segue的箭头,右方会显示Segue的一些信息,我们为Segue设置一个identifier,值为”nosegue”,如下图所示:
    这里写图片描述
    然后在ViewController.m文件中添加以下代码:
//在此方法中阻止某个Segue跳转,返回YES则跳转,返回NO,则不跳转
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    //如果Segue的identifier为nosegue,则不跳转
    if ([identifier isEqualToString:@"nosegue"]) {

        return NO;
    }

    return YES;
}

再次运行程序,点击button,不会执行跳转。

控制跳转的时机

通过上面的方法,我们可以使一个Segue不自动执行跳转,下面我们通过代码来控制Segue跳转的时机。
1. 在第一个页面上添加一个TextField,并创建对应的IBOutlet,命名为inputText。
2. 为button创建一个点击事件:- (IBAction)buttonTapped:(id)sender,并添加如下代码:

- (IBAction)buttonTapped:(id)sender {

    if ([_inputText.text isEqualToString:@"james"]) {

        //触发identifier为nosegue的Segue
        [self performSegueWithIdentifier:@"nosegue" sender:sender];
    }
    else
    {
        //do nothing
    }
}
  1. 运行程序,效果如下:
    这里写图片描述
上一篇:OpenWrt源码分析之libubox 下一篇:Segue传递数据