各种跳转语句以及其适用场合+页面跳转在三种编码形式中的实现
一、跳转语句的适用场合
基本上常用的有两种场合,一种是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];
使用时镶嵌到相关的逻辑语句内即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。