ios7.0结合storyborad实现页面跳转的总结

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

storyboard的潜规则

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

Objc代码  

  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

然后写代码来跳转:

Objc代码  

  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:方法,可以在里面做一些处理,比如:

Objc代码  

  1. BootstrapViewController* targetController = [segue destinationViewController];// 拿到目标view controller,然后要怎么样都可以了

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

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

Objc代码  

  1. BViewController.delegate = self;

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

unwind segue

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

时间: 2024-12-23 05:44:29

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

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

说明 结束连续几天的加班,最近的项目终于告一段落,今天抽点时间开始继续写我这篇拖了很久的<用weexplus从0到1写一个app>系列文章.写这篇文章的时候,weexplus的作者已经把weexplus重构了一下,可以同时打包出web端和native端,我这边的ui界面和项目结构也跟着做了一点变化.这里有weexplus官方放出的一个电影APP的demo,有需要的可以去下载看看,然后顺便给weexplus一个star吧! 文章可能会很长,在此分几篇文章来写,先占个坑: 用weexplus从0到

js中实现页面跳转

1.在本页中跳转到指定页面 1.window.location.href方式    <script language="javascript" type="text/javascript">           window.location.href="target.aspx";     </script> 2.window.navigate方式跳转   <script language="javascr

HTML 定时页面跳转

有 2 种方法可以实现 html 的定时页面跳转,1.meta refresh 实现.2.JavaScript 实现. 1.通过 meta refresh 实现 3 秒后自动跳转到 http://www.cnblogs.com/wuxibolgs329/ 页面. <!doctype html> <html> <head> <meta charset="utf-8"> <title>前端笔记</title> <

iOS-UITableView-处理cell上按钮事件(弹出警示框,页面跳转等)

一. 目的: 实现UITableViewCell上按钮点击事件可以进行页面跳转. 二. 实现方法: 1. 用协议的方式的实现. 2. 需要自定义UITableViewCell. 三. 代码部分. cell.h中 #import <UIKit/UIKit.h> @protocol SevenProtocolDelegate <NSObject> - (void)sevenProrocolMethod:(UIViewController *)viewController and:(NS

点击事件然后页面跳转到指定DOM元素的位置

设置一个函数,执行函数滚动条自动拖动,页面跳转到指定DOM元素的位置. 实现方式很简单,首先引入animatescroll.js文件(要先引入JQuery),然后 $('#id').animatescroll(); 即可调到指定DOM元素在页面的位置. 为方便可以编写一个函数,传入DOM元素的ID function jumpTo(id){ $("#"+id).animatescroll(); } 附animatescroll.js /* 使用方法: $("#id")

通过Manifest的配置信息实现页面跳转

1:新建一个xml文件,如second_view.xml文件,然后新建一个Activity如SecondActivity.java并在里面设置setContentView(R.layout.second_view.xml); <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro

ngRoute+ngAnimate与JQM中的页面跳转的区别

1.ngRoute+ngAnimate与jQM中的页面跳转有何异同? 相同点: (1)完整的HTML只需要一个 (2)使用异步AJAX请求获取下一个页面 (3)可以实现转场动画 不同点: (1)ngRoute需要配置路由字典:jQM没有,更加灵活 (2)ngRoute访问路由地址的格式——特殊格式的hash http://xxx/index.html#/main jQM访问页面地址——普通的URL http://xxx/tpl/main.html (3)ngRoute访问的路由页面可以使用F5刷

页面跳转 和虚拟键盘的自动隐藏

前提:起码要有两个视图控制器. 注意事项: 设置跳转的动画效果 UITextField输入时,虚拟键盘的位置设置(整体布局向上移动,虚拟键盘的自动隐藏) 实现的功能: A:在第一个页面跳转到第二个页面,然后第二个页面点击按钮,进行返回 B:在第一个页面有一个text控件,点击一个按钮,传递到第二个页面,然后显示到第二个 页面的label上面: 效果展示: 步骤: 1.新建两个类,然后勾选xib,在AppDelegate的实现文件把其中的一个视图加载进去 //新建一个视图控制器 MainViewC

HTML 页面跳转的五种方法

H方法TML 页面跳转的五种方法 下面列了五个例子来详细说明,这几个例子的主要功能是:在5秒后,自动跳转到同目录下的hello.html(根据自己需要自行修改)文件.1) html的实现 <head><!-- 以下方式只是刷新不跳转到其他页面 --><meta http-equiv="refresh" content="10"><!-- 以下方式定时转到其他页面 --><meta http-equiv="