本文使用的软件版本:

IOS:6.1

XCode:4.6

Storyboard(故事板)是XCode4.2才开始支持的,为了使设计View更容易。尽管用以前的nib(xib)拖拖拽拽也没问题,不过却需要 在各种文件之间来回切换,对于初学者很容易崩溃。Storyboard在这方面改进了不少,基本上只要在storyboard界面就可以完成一切,尤其是 View导航,可以不编写一行代码就可以搞定。尽管storyboard在实现View导航方面要比xib更容易使用,不过对于初学者来说仍然有一些难 度,因此本文及后面几篇文章会详细介绍如何使用storyboard实现各种类型的导航。

本文会介绍一种最简单的导航方式,也就是单击当前View的一个Button,会跳到另外一个View上,并且向这个View传递数据。

首先在XCode中建立一个“SingleView Application”类型工程,主要要选择“Use Storyboard”和“Use Automatic Reference Counting”,这样就可以使用ARC了,也会自动建立一个storyboard。工程名是StoryboardDemo1。

接下来再建立一个Objective-CClass,类名为MyViewController,注意Superclass为 UIViewController,并且下面两个复选框都不要选中,因为这里不需要XIB文件。如果按着这些步骤做,最后StoryboardDemo1 工程的目录结构如图1所示。

图1

接下来要做的是打开MainStoryboard.storyboard文件,会看到界面上有一个默认的View。这是根视图,也就是说程序运行会首先要 显示该视图。由于本文的目的是实现导航,而IOS规定所有参与导航的视图必须由UINavigationController控制。所以还需要在 storyboard上加一个UINavigationController,并且程序的入口由View变成了 UINavigationController。完成这项工作的方法很多,先来看一个超级无敌简单的方法,就是选中storyboard默认的View, 然后点击“Editor”>“Embed In”>“Navigation Controller”菜单项,XCode就会自动在storyboard上生成一个UINavigationController,并更改启动入口。最 终storyboard的效果如图2所示。

图2

除了这种简单的方法,还可以直接从控件面板上拖一个UINavigationController控件,不过默认这个控件还带了一个 UITableViewController。这个东西并不需要,所以可以删除UITableViewController。然后选中 storyboard中的UINavigationController,并按住ctrl键,然后拖动鼠标到默认视图上,这时会弹出一个菜单,选择最下面 的“root view controller”,最后的效果与图2完全一样。当然,为了显示自己有极客范,也可以在storyboard上放一个 UINavigationController控件后,进入storyboard的源代码文件(xml格式的文件),找到默认视图的声明代码,其实也很好 找,只要设置了默认视图导航条的标题,就会在这段代码的顶端出现一行注释,如图3所示。我们要找的就是<viewController>标签 的id属性值。该属性值唯一标识了默认视图,在当前storyboard配置文件中不会重复。

图3

接下来寻找导航条(UINavigationControlle)的声明代码,也可以根据自动生成的注释,如图4所示。

图4

我们只关心<navigationController>标签中的<connections>标签的 destination属性值,<connections>标签标示当前的导航控制器直接与哪个视图连接,也就是导航控制器中的第一个视图。 只要将该属性值改成默认视图的id属性值即可。当然,该属性值默认是指向UITableViewController的id属性值的。

接下来双击默认视图上面的导航条,输入标题文本“首页”,并在默认视图上放置一个Button,Title为“显示新视图”。

下面在storyboard上再放一个ViewController,并且在View上放置一个UITextField控件(可以放任何控件,这里只是为了演示方便),

尽管多个View会放到一个storyboard中,但不同的View会使用不同的源代码文件,在前面已经建了一个MyViewController类, 所以这个新的View会使用MyViewController类。然后需要将这个View与MyViewController类关联。选择 ViewController,在右侧面板中选择第3个按钮,设置MyViewController,如图5所示。

图5

接下来为UITextField在MyViewController.h文件中设置Outlet(名为textField,用于引用该控件)。

现在选择默认视图上的button,然后按住ctrl键,拖动鼠标到新放置的视图(上面有UITextField控件的视图),会弹出一个菜单,选中“push”,其他的选项不能用于这种导航方式。

到现在为止,storyboard上共有一个导航控制器和两个视图控制器,连接关系如图6所示。

图6

现在就可以运行程序了,然后点击“显示新视图”按钮,就可以切换到新视图,并且在新视图左上角会显示一个导航按钮,点击会返回“首页”视图。

还有一个问题,如何在两个视图直接传递数据呢?当然可以用全局变量或静态变量,不过这些方式有些不妥(全局和静态变量用多了不是什么好事)。

这里介绍一种通过prepareForSegue:方法传递数据的方法,由于默认视图对应的源代码文件是ViewController.m,所以在该文件中实现prepareForSegue:方法,代码如下:

  1. -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  2. {
  3. //  判断启动的目标View是否为MyViewController
  4. if([[segue destinationViewController] class] == [MyViewController class])
  5. {
  6. MyViewController *myView = [segue destinationViewController];
  7. [myView setText:@"李宁"];
  8. }
  9. }

当导航到MyViewController之前(已经创建了MyViewController对象,但还没调用 MyViewController.viewDidLoad方法)系统会调用prepareForSegue:方法。并且可以通过 [seguedestinationViewController]方法获取目标视图的对象,并调用视图对象中的方法设置任何的参数值。这里在 MyViewController.m中实现了setText方法,用于设置mText变量,然后在 MyViewController.viewDidLoad方法中通过mText变量值设置UITextField控件的显示文本。

除了可以通过[seguedestinationViewController]方法判断目标视图外,还可以使用下面的代码。

  1. -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  2. {
  3. if([segue.identifier isEqualToString:@"myview"])
  4. {
  5. MyViewController *myView = [segue destinationViewController];
  6. [myView setText:@"李宁"];
  7. }
  8. }

其中segue.identifier表示导航连接的标识,也就是单击图6中新视图和默认视图直接连线中间的圆圈后,在右侧的Identifier文本框的值,如图7所示。

图7

现在运行程序,当导航到新视图后UITextField控件中的文本就会变成“李宁”了。

源代码下载

iOS之Storyboard导航大揭秘(1)相关推荐

  1. 【Dev Club 分享第三期】iOS 黑客技术大揭秘

    "8小时内拼工作,8小时外拼成长"这是大家共同的理想.除了每天忙于工作外,我们都希望能更多地区吸收领域内的新知识与新技能,从而走向人生巅峰. Dev Club 是一个交流移动开发技 ...

  2. 【Dev Club分享第三期】iOS黑客技术大揭秘

    "8小时内拼工作,8小时外拼成长"这是大家共同的理想.除了每天忙于工作外,我们都希望能更多地区吸收领域内的新知识与新技能,从而走向人生巅峰. Dev Club 是一个交流移动开发技 ...

  3. 【腾讯Bugly干货分享】iOS黑客技术大揭秘

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5791da152168f2690e72daa4 "8小时内拼工作,8小 ...

  4. 360黑匣子之谜——奇虎360“癌”性基因大揭秘

    360黑匣子之谜--奇虎360"癌"性基因大揭秘 http://www.nbd.com.cn 2013-02-26 01:33 核心提示: 360怎么了?这是一家什么样的企业?带着 ...

  5. 2018python好找工作吗-2018年IT行业薪资大揭秘:你拖后腿了吗?

    原标题:2018年IT行业薪资大揭秘:你拖后腿了吗? 现在就业形势较好和较差的行业分别是哪些?哪些地区用人需求大?又有哪些地方就业竞争激烈?这份报告快来了解一下! 从报告可以看出,分行业来看,就业景气 ...

  6. 畅享10e会有鸿蒙吗,功能虽小作用很大 华为畅享10e隐藏功能大揭秘

    原标题:功能虽小作用很大 华为畅享10e隐藏功能大揭秘 如今使用手机游戏.观影.听音乐.刷短视频.拍照等多种多样的娱乐方式,充斥着年轻人生活之中.作为年轻用户娱乐的重要载体,现在的手机不仅硬件强大,在 ...

  7. FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  8. 2018年python工作好找吗-2018年IT行业薪资大揭秘:你拖后腿了吗?

    原标题:2018年IT行业薪资大揭秘:你拖后腿了吗? 现在就业形势较好和较差的行业分别是哪些?哪些地区用人需求大?又有哪些地方就业竞争激烈?这份报告快来了解一下! 从报告可以看出,分行业来看,就业景气 ...

  9. 抖音 Android 基础技术大揭秘!

    从2016年9月的1.0版本上线至今,抖音在6年间实现了从零开始的快速增长.这短短6年伴随的是移动开发技术与云计算.机器学习等技术融合带来的技术落地新形式,也遇到了直播.连麦等新的用户需求所带来的产品 ...

最新文章

  1. WordPress 性能优化:为什么我的博客比你的快
  2. python绘制可多角度查看的3d图像
  3. Django框架视图类
  4. [OS复习]进程管理4
  5. 【小题目】输入三个数字,获取三个数字中的最小值
  6. leetcode 57. 插入区间
  7. C++学习之路 | PTA乙级—— 1042 字符统计 (20 分)(精简)
  8. hbase 用户名密码_HBase开源 | HBase表管理系统HBaseManager2.0.2
  9. JavaAPI之Runtime类以及bat文件开启应用程序
  10. [Luogu] 程序自动分析
  11. SQL Server 软件环境安装与配置
  12. PHP获取当前完整网址加HTTP/HTTPS
  13. LibreELEC 10.0.2发布
  14. Part Ⅴ Entertainment 娱乐活动??
  15. tooth的用法_tooth的复数和用法例句
  16. 使用Xcode的Organizer监控线上用户 App 的使用情况
  17. 坎坎坷坷的深度学习之路(一)-环境搭建
  18. 2016年VB图书253本推荐
  19. 计算机体系-指令系统
  20. 新手必备AutoCAD练习图纸,分分钟提高你的绘图效率!

热门文章

  1. 苹果手机怎么设置时间24小时制_外媒实测苹果iPhone 12续航:5G网络下表现不佳...
  2. 红旗linux可以做服务器吗,在红旗Linux中的E-MAIL服务器(postfix及dovecot)配置过程...
  3. 【web】将一个jar包更改成war包
  4. iOS 关于UIView覆盖StatusBar的小知识点
  5. 1小时学会:最简单的iOS直播推流(二)代码架构概述
  6. 一:搭建一套免费的serverless网站
  7. 小程序 url 对象转字符串编码传参 url 字符串转对象解码接收参数
  8. iOS 富文本编辑工厂, 让书写更简便.
  9. iOS 用自签名证书实现 HTTPS 请求的原理实例讲解
  10. maven项目中 把依赖的jar包一起打包