前言:苹果官方是推荐我们将所有的UI都使用Storyboard去搭建,Storyboard也是一个很成熟的工具了。使用Storyboard 去搭建所有界面,我们可以很迅捷地搭建出复杂的界面,也就是说能为我们节省大量的时间。我们还可以很直观地看出各个界面之间的关系,修改起来也很方便。将 来如果遇到需要作修改的地方,我们只需要找到相对应的Storyboard就可以了,比起以前来说,快捷了不少。

我会在本文的最后附上Demo,可以帮助你们有更直观的理解,有需要的人可以去下载运行一下。

另外,建议大家实验每一种方法时,先清空界面上的内容,以避免出现错误。因为初学者很容易使得界面上有残留,具体的这里就不说明了。接下来,让开始我们的Storyboard之旅吧!

目录:

一、使用Storyboard进行跳转

1)纯Storybard界面操作

2)使用代码进行跳转

二、Storyboard界面传值

1)使用prepareForSegue方法进行跳转:

2)Storyboard Id跳转

一、使用Storyboard进行跳转

1)纯Storyboard界面操作

我们在Storyboard上放置一个按扭,在按扭上方点击并按住“右键”不放,拖动到跳转的下一个界面上。

松开右键后,会有一个黑色透明的弹出框,选择跳转的方式:

从这里可以看到,界面和界面之间多了一条线连接,如下图:

我们可以在Xcode右边的工具栏看到,我们刚刚的连线操作(现在可以运行项目了):

2)使用代码进行跳转

我们把刚刚的连线删除掉,如下图所示:

新建一个继承于UIViewController的类CodeViewController:

选中按扭所在的界面,设置它的类文件,默认都是继承于UIViewController,如下图所示:

我们把它改成刚刚新建的类“CodeViewController”,如下图所示:

把界面缩小(你可以在空白的地方双击一下,或者右键选择缩放比例),这次我们不是直接使用“按扭”连接界面,而是进行界面和界面之间的连线,如下图所示:

注意:100%的缩放是不能进行界面和界面之间的连线!

之后的操作和前面的一致,为了容易理解,我还是贴一下图:

选中“这条线”,在Storyboard Segue的Identifier指定一个标识符,后面我们会用到:

这时我们需要为按扭添加一个事件,为此需要同时显示Storyboard和.m文件,操作如下:

创建事件的操作和之前连线的操作一样:

为这个事件创建一个名字,然后点击Connect:

在事件里添加如下代码,把刚连线的Identifier传进去,sender一般为"self":

[self performSegueWithIdentifier:@"EasyCode" sender:self];

这样,就可以成功跳转了。

二、Storyboard界面传值

1)使用prepareForSegue方法进行跳转:

我们创建两个类,PrepareViewController和ReceiveViewController

然后在Storyboard上新建两个ViewController,把两个界面连接起来。操作步骤和上方(代码跳转)的相同,这次我们把连线的Identifier定义为“SendValue”:

有按扭的界面的类设置为PrepareViewController,如下图所示:

选择第二个界面,设置继承的类为ReceiveViewController:

ReceiveViewController.h:

#import <UIKit/UIKit.h>

@interface ReceiveViewController : UIViewController

@property (strong, nonatomic) NSString *name;
@property (assign, nonatomic) int age; @end

ReceiveViewController.m,当然是要输出一下啦,不然怎么知道传值有没有成功:

#import "ReceiveViewController.h"

@interface ReceiveViewController ()

@end

@implementation ReceiveViewController

- (void)viewDidLoad {
[super viewDidLoad]; NSLog(@"name is %@, age is %d", _name, _age);
} @end

PrepareViewController.m文件:

#import "PrepareViewController.h"
#import "ReceiveViewController.h" @interface PrepareViewController () @end @implementation PrepareViewController - (IBAction)goAction:(id)sender
{
// 根据指定线的ID跳转到目标Vc
[self performSegueWithIdentifier:@"SendValue" sender:self];
} - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// segue.identifier:获取连线的ID
if ([segue.identifier isEqualToString:@"SendValue"]) {
// segue.destinationViewController:获取连线时所指的界面(VC)
ReceiveViewController *receive = segue.destinationViewController;
receive.name = @"Garvey";
receive.age = 110;
// 这里不需要指定跳转了,因为在按扭的事件里已经有跳转的代码
// [self.navigationController pushViewController:receive animated:YES];
}
} @end

可以成功接收到值啦(大功告成):

2)Storyboard Id跳转

继续拖两个纯净的界面(VC)到Storyboard上,第一个界面也是放上一个UIButton:

IdViewController是我刚新建出来的类,接收值的界面用回ReceiveViewController类,指定界面继承的类为(IdViewController、ReceiveViewController)

第二个界面设置Storyboard id为“IdReceive”,后面跳转会用到:

IdViewController.m

- (IBAction)action:(id)sender
{
// 获取指定的Storyboard,name填写Storyboard的文件名
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
// 从Storyboard上按照identifier获取指定的界面(VC),identifier必须是唯一的
ReceiveViewController *receive = [storyboard instantiateViewControllerWithIdentifier:@"IdReceive"];
receive.name = @"GC";
receive.age = 10;
[self.navigationController pushViewController:receive animated:YES];
}

可以运行程序了,能够成功接收到值,成功!

小结:你们能否看出各个方法的优点和缺点?现在没发现不要紧,当你们以后遇上真正需要的时候,优缺点就很容易知道了,这也算是留给你们思考的一件事情吧。

题外话:

有部分人是不同意使用Storyboard的,他们的的观点如下:

1)Storyboard出现的错误不能调试,往往使得他们开发缓慢

2)对于多人开发,版本管理会比较复杂

3)Storyboard经常无缘无故出现问题!使得他们很头痛!

首先,对于第1点和第3点的回答:Storyboard出现的错误往往是可以避免的。其次,Storyboard不会无缘无故出现问题,如果真的出现问题了,往往是开发者的操作不当成造成的。我为什么这样说?

因为我以前也遇到很多因Storyboard引起的错误,那时候的我也经常怨Storyboard。但随着对Storyboard越来越熟悉后,我才发现,以前全都是因为自己操作不当,而造成程序的崩溃。

第2点:多人开发,可以区分模块开发,每个人负责的模块都不相同,不一定要所有人的都开发同一个模块。当然,有特殊情况的我也不知道,所以说这个需要根据项目的大小和复杂度去判定的。

花了一个下午去写这一篇文章,感觉好累好累。

希望这篇文章能对大家所帮助,谢谢。

Demo下载地址:

http://pan.baidu.com/s/1bnCkydD


博文作者:GarveyCalvin

博文出处:http://www.cnblogs.com/GarveyCalvin/

iOS开发-使用Storyboard进行界面跳转及传值的更多相关文章

  1. 【转】IOS开发:[1]Xcode5界面入门

    ios开发离不开xcode,这篇以xcode5界面来介绍一下xcode的界面都有哪些内容. 工具/原料 xcode5 整体来看区域有哪些? 1 首先我们先整体来看一下,xcode5界面可以分为五大主要 ...

  2. iOS开发-应用之间的跳转及通信

    Update 2016-08-12: 在Github的Demo上增加Mac自定义Url Scheme,可以在Safari上输入特定协议头打开应用,并传递参数) 简介 我们接下来将要实现应用程序之间的跳 ...

  3. swift 下storyboard的页面跳转和传值

    ------------------1. 最简单的方法 拖拽, 这个就不用多解释了吧. 直接拖拽到另一个视图控制器, 选择 show, 就行了. 2. 利用 Segue 方法 (这里主要是 方法1 的 ...

  4. Swift开发教程--使用Storyboard进行界面跳转

    使用storyboard结合代码来做确实能够给开发带来非常多的便利. 在实践的过程中,我们常常会遇到界面的跳转问题. 通过控件和界面的建立的"连接"就能够了. 假设是navigat ...

  5. 新手介绍简单一下iOS开发中几种界面传值

    首先在处理iOS-UI中,也许在很多地方需要用到两种甚至多种不同界面之间的传值,相比这也是很多iOS入门成员头疼问题,同样作为新手的我在接触这类传值时候也一脸懵然,经过一段时间的研究,对于简单的传值有 ...

  6. iOS 开发笔记-Storyboard

    什么时候用Pust,什么时候用Modal? 一般情况下,是导航控制器点过去的,都使用Pust.如果是相对独立的,则用Modal,比如是导航上面的+添加之类. 关闭一个Modal -(IBAction) ...

  7. iOS开发系列-应用程序之间跳转

    概述 常见的涉及到应用程序之间的跳转场景,比如社交分享.支付宝.微信支付.链接跳转到应用. 在iOS中应用跳转的本质:打开一个应用只需要拿到对应应用的URL即可. 统一资源定位符 URL(统一资源定位 ...

  8. iOS开发-微博客户端-基本界面搭建(01)

    1>创建程序载入界面 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDict ...

  9. ios开发——实用技术篇&应用间跳转

    应用之间的跳转 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够打开appB这个应用. 1 ...

随机推荐

  1. HTML5 Canvas绘图系列之一:圆弧等基础图形的实现

    之前的一个微信项目已经要结项了,最近整理一下项目中使用较多的canvas画图方面的知识吧,打算写个3,4篇的样子.本篇主要介绍基础操作和弧线画法. 之后再写一下趋势图,直方图,文本图像处理的. 言归正 ...

  2. laravel5.3 笔记一

    laravel5.3 笔记 安装环境 laravel环境,laravel中文学习论坛上面有相关的教程 创建应用 laravel new blog 其中blog就是你的应用的名字 数据迁移 php ar ...

  3. 通过项目逐步深入了解Mybatis<三>

    Mybatis 高级知识 安排:对订单商品数据模型进行分析 订单商品数据模型 数据模型分析思路: 1.每张表记录的数据内容(分模块对每张表记录的内容进行熟悉,相当于学习系统需求的过程) 2.每张表重要 ...

  4. Android学习总结——实现Home键功能

    实现Home键功能简而言之就是回到桌面,让Activity不销毁,程序后台运行. 实现方法: Intent intent= new Intent(Intent.ACTION_MAIN); intent ...

  5. 【Unity3d】【项目学习心得】从资源server下载资源(一)

    项目里面的很多资源都是从资源server载入的,这样子能够减小client的包大小. 所以我们须要一个专门的类来管理下载资源. 资源分非常多类型,如:json表,txt文件,image文件,二进制文件 ...

  6. sharepreference实现记住password功能

        SharePreference是用于保存数据用的.主要调用Context.getSharePreferences(String name, int mode)方法来得到SharePrefere ...

  7. Log4Net配置 转

    http://www.cnblogs.com/qingyi/archive/2010/01/14/1647915.html 用一些东西老是忘记,先记在这啦.. <!--log4net相关说明一. ...

  8. android XML解析之DOM解析方式

    DOM 解析方式步骤: 第一步:首选需要获得DOM解析器工厂实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ...

  9. 《JavaScript 闯关记》之语句

    表达式在 JavaScript 中是短语,那么语句就是整句命令.表达式用来计算出一个值,语句用来执行以使某件事发生.从本质上看,语句定义了 JavaScript 中的主要语法,语句通常使用一或多个关键 ...

  10. JSP 实现 之 读取数据库显示图片

    用JSP从数据库中读取图片并显示在网页上 环境mysql+tomcat: <1>先在mysql下建立如下的table. 并insert图像. mysql.sql文件如下: ) unsign ...