各种跳转语句以及其适用场合+页面跳转在三种编码形式中的实现

     一、跳转语句的适用场合

            基本上常用的有两种场合,一种是ViewController,另一种是navigationController。

            适用于ViewController:

[self presentViewController:@1 animated:YES completion:nil];//前进跳转
@1部分为ViewController类声明的对象
[self dismissViewControllerAnimated:YES completion:nil];//后退跳转
后退跳转可以理解为销毁当前页面,现实前一页面
           

            适用于navigationController:

[self.navigationController pushViewController:@1 animated:YES];
@1部分为ViewController类声明的对象

    [self.navigationController popToRootViewControllerAnimated:YES];
    [self.navigationController popToViewController:@1 animated:YES];
    [self.navigationController popViewControllerAnimated:YES];
第一个是销毁当前页面回到根视图,因为navigationController是栈,可视作链式结构,

第二个是销毁当前页面前往指定视图,

第三个是销毁当前页面前往前一页面。


     二、跳转的实现

       通常的三种编码形式主要是:纯代码、xib界面、故事板型

       涉及到跳转页面这个方面,每个形式之间都有不同。

       1、故事板型(storyboard)

          这个形式下有三种情况

           一种是直接拖线建立连接关系,并且是在navigationController下。当前界面的按钮拖动连接线至目标界面,选择show选项即可

          另一种稍复杂,因为有些情况下,无法通过拖线建立联系,比如点击Cell进入另一个见面,并且这个Cell是动态生成的,如微博那种形式。以下是相关代码

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //正向传值
    Info *info=self.InfoArray[indexPath.row];
    ModifyEditViewController*mo=[self.storyboard  instantiateViewControllerWithIdentifier:@"Modify"];//。。。。@1
    mo.sendtheinfo=info;
    mo.temp=indexPath;//传过去预修改的位置路径
    //回传修改的值
    mo.delegatex=self;
    [self.navigationController pushViewController:mo animated:YES];//。。。。@2
}
        故事板型页面跳转,需要形成一个故事板型的对象来进行跳转,即在@1的语句中,需要在当前的功能函数中,声明一个目标故事板的对象,再用等号后面的语句来定义声明目标故事板,并且之前要做的准备工作就是:在目标故事板中定义它的标识:Identifier:Modify.这个是@1语句中需要注意的。

        以上的准备工作做好了以后,在根据需要进行相关形式的跳转,因为这里用到了导航,所以用pushViewController,跳转到目标故事板。

       

       最后一种,在ViewController形式中,进行跳转。有一种情况,和第一种的一样当前界面的按钮拖动连接线至目标界面,选择show选项即可,这种情况是无条件跳转的。点击即可跳转。还有一种是有条件跳转的,比如登陆界面,需要有判断,再选择是否跳转,并且同样适用于navigationController中的登录。以下是代码:

 if ([self.fill.text isEqualToString:@"abc"]&&[self.Acc.text isEqualToString:@"abc"]) {
        UIStoryboard *us=self.storyboard;//。。。。@1
        SndViewController *snd=(SndViewController *)[us instantiateViewControllerWithIdentifier:@"Welcome"];//。。。。@2
        snd.temp=self.Acc.text;
        [self presentViewController:snd animated:YES completion:nil];//。。。。@3
//        [self performSegueWithIdentifier:@"Welcome" sender:self];    //不需传值的时候。。。。@4
    }
在这种情况中,同样需要声明故事板,并且给故事板添加标识,即@1、@2两句。代码中虽然@4注释了一句,但是后来一想觉得两种方式都可以。

         总结来说就是,故事板之间没有可视连线,都需要以故事板形式进行跳转:目标故事板的类进行声明对象,再用故事板、标识,来定义该对象,最后用跳转语句装载该对象进行跳转。

       2、xib型,

        xib型的跳转比较单纯,没有故事板那么复杂。代码如下:

 TwoViewController *twoVC=[[TwoViewController alloc] initWithNibName:@"TwoViewController" bundle:nil];//。。。。@1
    
    if ([self.Acc.text isEqualToString:@"admin"]&&[self.Pwd.text isEqualToString:@"admin"])
    {
        twoVC.temp=self.Acc.text;
        [self presentViewController:twoVC animated:YES completion:nil];
        
    }

       首先,声明类对象是肯定要做的,不过要注意在xib型里,@1语句中等号后面是传统的初始化形式,关键语句为initWithNibName,后面接类名。

       然后用相关的跳转语句装载声明的对象来进行跳转。

      3、纯代码型

          纯代码型的比xib的还要容易一些,不过还是分两步走,一声明、二跳转,代码如下:

TwoViewController *twoVC=[[TwoViewController alloc] init]; 
[self presentViewController:twoVC animated:YES completion:nil];

使用时镶嵌到相关的逻辑语句内即可。



版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-08-31 14:20  温柔的天空  阅读(515)  评论(0编辑  收藏  举报