折腾了一整天,本文总结一下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. 剑指Offer35 两个链表第一个公共结点

    /************************************************************************* > File Name: 35_FirstC ...

  2. linux /etc/sysctl.conf 禁止别人ping自己

    vi /etc/sysctl.conf如果希望屏蔽别人 ping 你的主机,则加入以下代码:# Disable ping requestsnet.ipv4.icmp_echo_ignore_all = ...

  3. Log4.net使用配置

    开发中经常使用到日志记录功能,Log4.net可以将日志记录到文件中,也可以记录到数据库中,使用非常方便,之前也一直在用,最近也参照了一下网上的资料,想简单总结一下 本文重在通过通用日志类来使用Log ...

  4. Unity3d 引擎原理详细介绍、Unity3D引擎架构设计

    体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则. Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于 ...

  5. JavaScript之菱形打印

    很高兴来到博客园!迈入这座知识的殿堂,实是幸运.这是我的第一篇博客,开启丰富有趣的学习之旅,同时,我希望和大家一起学习一起进步,Let‘s go! <!DOCTYPE html PUBLIC & ...

  6. php删除数组中相同的元素,只保留一个相同元素

    <?php// 删除数组中相同元素,只保留一个相同元素function formatArray($array){sort($array);$tem = ”;$temarray = array() ...

  7. hdu 1716(dfs)

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1716     排列2   Problem Description Ray又对数字的列产生了兴趣:现 ...

  8. 【ASP.NET】获取网站目录的方法

         获取网站物理路径: HttpRuntime.AppDomainAppPath 获取网站虚拟路径: HttpRuntime.AppDomainAppVirtualPath

  9. java中从1000万个随机数中查找出相同的10万个随机数花的最少时间

    偶然在群里看到有人问到大数据查询,自己也就想了小艾改如何解决,从从1000万个随机数中查找出相同的10万个随机数花的最少时间, 谈到效率,自然是hashmap莫属. import java.util. ...

  10. 构造高度自适应的textarea

    高度自适应的textarea,这个需求还是比较常见的,随着用户的输入textarea的高度自动变化,这样输入较少的时候可以节省空间,输入多的时候可以不出现滚动条,让内容尽可能的展现在用户的视线内. 可 ...