IOS开发-使用Storyboard进行界面跳转及传值

摘要:
通过使用Storyboard构建所有界面,我们可以快速构建复杂的界面,这可以节省我们大量的时间。我们只需要找到相应的情节提要。接下来,让我们开始故事板之旅。文件夹:1.使用Storyboard跳转1)纯故事板界面操作2)使用代码跳转2。故事板界面传递值1)使用prepareForSegue方法跳转2)StoryboardId跳转1。使用Storybboard跳转1)纯粹的故事板接口操作我们在故事板上放置一个按钮。
主题StoryBoard

前言:苹果官方是推荐我们将全部的UI都使用Storyboard去搭建,Storyboard也是一个非常成熟的工具了。

使用Storyboard去搭建全部界面,我们能够非常迅捷地搭建出复杂的界面,也就是说能为我们节省大量的时间。我们还能够非常直观地看出各个界面之间的关系,改动起来也非常方便。将来假设遇到须要作改动的地方。我们仅仅须要找到相相应的Storyboard就能够了。比起曾经来说。快捷了不少。

我会在本文的最后附上Demo,能够帮助你们有更直观的理解,有须要的人能够去下载执行一下。

另外。建议大家实验每一种方法时,先清空界面上的内容,以避免出现错误。由于刚開始学习的人非常easy使得界面上有残留,详细的这里就不说明了。接下来,让開始我们的Storyboard之旅吧。

文件夹:

一、使用Storyboard进行跳转

1)纯Storybard界面操作

2)使用代码进行跳转

二、Storyboard界面传值

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

2)Storyboard Id跳转

一、使用Storyboard进行跳转

1)纯Storyboard界面操作

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

IOS开发-使用Storyboard进行界面跳转及传值第1张

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

IOS开发-使用Storyboard进行界面跳转及传值第2张

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

IOS开发-使用Storyboard进行界面跳转及传值第3张

我们能够在Xcode右边的工具栏看到,我们刚刚的连线操作(如今能够执行项目了):

IOS开发-使用Storyboard进行界面跳转及传值第4张

2)使用代码进行跳转

我们把刚刚的连线删除掉,例如以下图所看到的:

IOS开发-使用Storyboard进行界面跳转及传值第5张

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

IOS开发-使用Storyboard进行界面跳转及传值第6张

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

IOS开发-使用Storyboard进行界面跳转及传值第7张

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

IOS开发-使用Storyboard进行界面跳转及传值第8张

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

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

IOS开发-使用Storyboard进行界面跳转及传值第9张

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

IOS开发-使用Storyboard进行界面跳转及传值第2张

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

IOS开发-使用Storyboard进行界面跳转及传值第11张

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

IOS开发-使用Storyboard进行界面跳转及传值第12张

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

IOS开发-使用Storyboard进行界面跳转及传值第13张

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

IOS开发-使用Storyboard进行界面跳转及传值第14张

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

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

IOS开发-使用Storyboard进行界面跳转及传值第15张

这样,就能够成功跳转了。

二、Storyboard界面传值

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

我们创建两个类,PrepareViewController和ReceiveViewController

IOS开发-使用Storyboard进行界面跳转及传值第16张

然后在Storyboard上新建两个ViewController,把两个界面连接起来。

操作步骤和上方(代码跳转)的同样,这次我们把连线的Identifier定义为“SendValue”:

IOS开发-使用Storyboard进行界面跳转及传值第17张

有按扭的界面的类设置为PrepareViewController。例如以下图所看到的:

IOS开发-使用Storyboard进行界面跳转及传值第18张

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

IOS开发-使用Storyboard进行界面跳转及传值第19张

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

能够成功接收到值啦(大功告成):

IOS开发-使用Storyboard进行界面跳转及传值第20张

2)Storyboard Id跳转

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

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

IOS开发-使用Storyboard进行界面跳转及传值第21张

IOS开发-使用Storyboard进行界面跳转及传值第22张

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

IOS开发-使用Storyboard进行界面跳转及传值第23张

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];
}

能够执行程序了。能够成功接收到值,成功。

IOS开发-使用Storyboard进行界面跳转及传值第24张

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

题外话:

有部分人是不允许使用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进行界面跳转及传值》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇决策树算法总结python 处理10000个txt,每个文件夹里面放1000个。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转载]iOS 开发中为什么更新UI都要放在主线程中?

原因有2个: 1、在子线程中是不能进行UI 更新的,而可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为分线程可以更新UI。如果子线程一直在运行,则子线程中的UI更新的函数栈 主线程无法获知,即无法更新 2、只有极少数的UI能,因为开辟线程时会获取当前环境,如点...

iOS开发-------基于WKWebView的原生与JavaScript数据交互

https://blog.csdn.net/runintolove/article/details/52064268 版权 WKWebView是iOS8.0之后用以替代UIWebView的网页浏览器,包含在WebKit中,可以通过 @import WebKit 导入。 如果工程需要适配iOS7,那么请在iOS7中使用UIWebView。 如果是iOS...

iOS开发——远程消息推送的实现

       在我们使用App的过程中。总是会收到非常多的消息推送。今天我们就要来实现这个功能。首先消息推送分为本地消息推送和远程消息推送。而当中又以远程消息最为经常使用。 可是在推送远程消息之前。有两个前提条件。你须要购买苹果的开发人员账号,也就是每年99刀;而且有一台iOS真机(模拟器不能測试推送)。事实上远程推送须要有server,可是我们自己临时...

iOS开发核心动画之粒子效果

一. 示意图     绘画出一条线,点击开始有很多粒子绕着线运动,点击重绘消除粒子和线 二. 实现代码     设计思路:自定义一个View来描述控制器的View,在View加载过程中进行初始化,给View添加手势(UIPanGestureRecognizer),将自定义View转成复制层,创建一个粒子层,添加到复制层上,并保存粒子     监...

iOS 架构-App组件化开发

前因 其实我们这个7人iOS开发团队并不适合组件化开发。原因是因为性价比低,需要花很多时间和经历去做这件事,带来的收益并不能彻底改变什么。但是因为有2~3个星期的空档期,并不是很忙;另外是可以用在一个全新的App上。所以决定想尝试下组件化开发。 所谓尝试也就是说:去尝试解决组件化开发当中的一些问题。如果能解决,并且有比较好的解决方案,那就继续下去,否则就...

iOS程序的启动过程-UIWindow

UIApplicationMain main函数中执行了一个UIApplicationMain这个函数 int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);argc、argv:直接传递给UIAppl...