您当前的位置:首页 > 建站知识 > 编程知识

Segue的使用

发布时间: 2020-04-30 │ 浏览:2176 

Segue用于视图之间的转场。


我们先从简单的入手:
新建LoginVC.h、LoginVC.m和MainVC.h、MainVC.m

在库中拖出两个ViewController到故事板:

鼠标选中一个ViewController,打开身份检查器:

在Class栏填上LoginVC,这样故事板中的ViewController就与.m文件建立了联系。

同样的方法,另一个ViewController的Class填MainVC。

我们要做的是从LoginVC跳转到MainVC


在LoginVC上放入一个Botton控件,鼠标选中Botton,然后按下鼠标右键不放,拖到MainVC,如下图:

然后再松开鼠标,这时会弹出:

选【Present Modally】,两视图控制器之间会生成一条箭头:

鼠标点选箭头,翻到身份检查器:

identifier栏填toMain。


回到LoginVC.m文件,在按钮的单击事件中写:

[self performSegueWithIdentifier:@"toMain" sender:self];//这里的toMain就是上面定义的segue标识名


运行一下,可以看到跳转的效果了。


不要满于现状,应用中还会遇到更多的实际问题,比如跳转时带参数怎么传?跳转前要判断一下,满足条件再跳转。


有一种方法是定义协议来存放参数值,我试过,只能传常量,如果是变量就传不过去。

而用NSUserDefaults存储,可以解决这个问题,即跳转前把参数存入NSUserDefaults,然后在目的页的viewDidAppear事件中读取NSUserDefaults中的参数。


最后说说跳转前加判断条件如何做。比如让用户在文本框中输入手机号码,按【确定】按钮后进入下一页,这时就要判断用户输入的手机号码格式对不对,只要手机号码格式正确了才能走到下一页。

按钮单击事件中的跳转代码不变:

[self performSegueWithIdentifier:@"toMain" sender:self];


重载以下两个函数

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    //NO的意思是让segue先不急跳转,要执行下面的prepareForSegue函数,跳不跳转在prepareForSegue函数里决定
    return NO;
}

//跳转前触发
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    id page; //id在oc中是一种数据类型

    if ([[segue identifier] isEqualToString:@"toMain"]) {

        if(手机号码格式是对的){  //具体判断按你的实际情况自己写了

            page = segue.destinationViewController;

        }else{

            //提示

        }
    }
}