折腾了一整天,本文总结一下ios7.0页面跳转有关的内容

storyboard的潜规则

我接触ios很晚,环境已经是xcode5+ios7,所以对以前的IOS开发模式并不了解。在网上查阅了很多资料,发现以前的代码,很多都需要自己coding来创建ViewController,比如:

  1. WTwoViewController *controller = [[WTwoViewController alloc]initWithNibName:@"WTwoViewController" bundle:nil];
  2. [self presentViewController:controller animated:YES completion:nil];

但是用storyboard来管理view controller的话,storyboard会自动处理view controller的初始化动作,所以就不再需要自己coding来创建view controller的实例。在另外一篇博客里看到这句话:

“用过xib的人我相信很多人都会经常用到-presentModalViewController:animated:以及-pushViewController:animated:这两个方法。这种代码在storyboard里将成为历史;取而代之的是Segue”

基于控件的跳转

用storyboard做开发,经常需要拉线,本文不介绍,请看这篇官方文档:

start developing iOS app today

这种拉线,是从button拉到view controller:

这种方式只要点击了这个button,就会自动跳转,不需要写任何代码

直接从controller到controller

 
这种拉线是直接从View Controller到View Controller:
 
这种方式已经预先创建了segue,但是还需要手工编码,首先需要给segue设置一个identity
 
然后写代码来跳转:
  1. // 跳转到bootstrap
  2. - (void) jumpToBootstrap{
  3. [self performSegueWithIdentifier:@"fromWelcomeToBootstrap" sender:self];
  4. }

这段代码必须写在-viewDidAppear里,不能写在-viewDidLoad里,否则会报一个错误:whose view is not in window hierarchy!

 

页面之间传值

 
以前用-presentModalViewController:animated:方法来跳转的时候,一般需要通过delegate等方式来传值,现在一律用segue API就能搞定
 
在segue发生之前,先会调用当前View Controller的-prepareForSegue:sender:方法,可以在里面做一些处理,比如:
  1. BootstrapViewController* targetController = [segue destinationViewController];// 拿到目标view controller,然后要怎么样都可以了

不过这里要注意的是,似乎不能在prepareForSegue方法里设置destination view controller的view,因为这个时候view还没有被storyboard实例化。不过可以先传参,后面再设置

 
另外网上看到很多帖子,都说从B回到A的时候如果也需要传值,可以把A设置成B的delegate:
  1. BViewController.delegate = self;

这里我不是很理解,当从B回到A的时候,也设置一个segue似乎就行了

 

unwind segue

 
unwind segue比较特殊,是在目标View Controller里先设置一个action,然后在source View Controller里拖线到exit图标上。这种情况下,除了会调用source的prepareForSegue方法以外,target View Controller的那个action也会被调用。

ios7.0结合storyborad实现页面跳转的总结的更多相关文章

  1. react-router 4.0(四)页面跳转验证提示

    import React from 'react' import ReactDOM from 'react-dom' import { HashRouter, Route, Link, Prompt ...

  2. 自定义PHP页面跳转函数redirect($url, $time = 0, $msg = '')

    利用PHP的header()函数,可以实现页面跳转,如 header("Location: " . $url); 但它有个缺点,一旦HTTP报头块已经发送,就不能使用 header ...

  3. Android 7.0 Gallery图库源码分析4 - SlotView手势监听及页面跳转

    上篇文章讲了初始化View时会实例化一个SlotView并监听其事件,至于它是怎么实现的,用的是Android自带的GestureDetector. GestureDetector是Android自带 ...

  4. ThinkPHP5.0框架开发实现简单的页面跳转

    ThinkPHP5.0框架开发实现简单的页面跳转 一.效果 登录界面 登录成功界面 登录失败界面 二.目录结构 三.代码 控制器中的Login.php <?php // 声明命名空间 names ...

  5. 用weexplus从0到1写一个app(2)-页面跳转和文章列表及文章详情的编写

    说明 结束连续几天的加班,最近的项目终于告一段落,今天抽点时间开始继续写我这篇拖了很久的<用weexplus从0到1写一个app>系列文章.写这篇文章的时候,weexplus的作者已经把w ...

  6. web设计页面跳转的方法

    一.asp.net c# 打开新页面或页面跳转 1. 最常用的页面跳转(原窗口被替代):Response.Redirect("newpage.aspx"); 2. 利用url地址打 ...

  7. Html中设置访问页面不在后进行其他页面跳转

    Html中设置访问页面不在后进行其他页面跳转 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...

  8. Ajax发送POST请求SpringMVC页面跳转失败

    问题描述:因为使用的是SpringMVC框架,所以想使用ModelAndView进行页面跳转.思路是发送POST请求,然后controller层中直接返回相应ModelAndView,但是这种方法不可 ...

  9. PHP页面跳转(PHP笔记)

    目前学习到三种方法: 1.调用js跳转 2.header()跳转 3.调用HTML方法实现 因为一直在自己学习没有进入项目,并不知道哪个更常使用. 调用js跳转. <?php //这里是跳转方法 ...

随机推荐

  1. springmvc(1)--配置

    最近把spring的使用整理下,版本4.1.1.RELEASE SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求先访问的都是DispatcherServlet,D ...

  2. Kinect For Windows V2开发日志四:使用OpenCV显示深度图像

    代码示例: #include <Kinect.h> #include <iostream> #include <opencv2\highgui.hpp> using ...

  3. 剑指Offer42 左旋字符串

    /************************************************************************* > File Name: 42_LeftRo ...

  4. codeforces 677C C. Vanya and Label(组合数学+快速幂)

    题目链接: C. Vanya and Label time limit per test 1 second memory limit per test 256 megabytes input stan ...

  5. JAXL发送房间消息

    使用composer形式安装的JAXL <?php require_once "vendor/autoload.php"; $client = new JAXL(array( ...

  6. Android锁屏软件

    需求描述:锁屏软件就是点击应用然后直接锁屏,不会弹出任何界面 设计思路:应用启动以后通过getSystemService获取系统的服务,调用安卓系统的DevicePolicyManager和Compo ...

  7. 【CSS3】---last-of-type选择器+nth-last-of-type(n)选择器

    last-of-type选择器 “:last-of-type”选择器和“:first-of-type”选择器功能是一样的,不同的是他选择是父元素下的某个类型的最后一个子元素. 示例演示 通过“:las ...

  8. Jquery 格式化时间

    我们常常会通过datetime得到时间,但是网页前台往往会显示不同的时间 如:2013-12-15 2013年12月23日 2013 12 15 等多种显示效果,这就需要我们把时间格式化一下. 下面是 ...

  9. 将java项目打包成jar文件并在cmd运行

    保证java项目不报错能够通过运行 选择export 选择一个你要运行的程序入口Main方法 打开cmd,前提是你的javajdk及环境变量配置完成

  10. linux 用户打开进程数和文件数调整

    1 查看nproc(max user processes)命令 [root@vm-cdh4 ~]# ulimit -u 14866 2 修改nproc 临时修改, 重登录或重启后失效: [root@v ...