Storyboarding 是在ios 5时候引进入的一个非常出色的特性。节省了为app创建user interfaces的时间。

如果你的app有多个屏幕storyboards可以帮助你降低代码的粘合度。比如从一个屏幕进入到另外一个屏幕。不会为每一个view controller使用单独的nib文件。你的app将只使用一个storyboard就可以包含所有这些view controllers的设计和关系。

storyboard有很多优势:

可以对所有app中的屏幕以及他们之间的关系有个更好的概念上的概览。更容易跟踪一切因为整个设计是在单独的一个文件中。而不是分成多个独立的nib文件。

storyboard描述了不同屏幕间的传输。这些传输称为segues并且只要通过简单的ctrl-dragging从一个view controller到另一个就可以建立了。由于segues的存在减少了代码量

storyboard使得table view的设计和使用更加方便。包含了cels和static sells features和属性。

还可以讲storyboard和nib文件混用

Storyboards tutorial: iOS 7 style

打开xcode创建新的工程,使用single view applicaiton模版。

并填写如下的选项

  • Product Name: Ratings
  • Organization Name: fill this in however you like
  • Company Identifier: the identifier that you use for your apps, in reverse domain notation
  • Class Prefix: leave this empty
  • Devices: iPhone

之前版本的xcode需要特别指出是否使用storyboards,但是xcode5不再有这个选项,storyboards默认可用。

创建完成后是下面这个样子:

新的工程有两个class,AppDelegate和ViewController. Main.storyboard文件,并且没有nib文件

这是一个只支持竖屏显示的app,所以需要在Deployment Info, Device Orientation 下面 uncheck Landscape Left和Landscape Right选项

打开Main.storyboard文件,在iphone中每次只有一个scene是可视的,但是在ipad中可以一次展示多个,例如master和detail panes或者popover content

Note: Xcode 5 enables Auto Layout by default for storyboard and nib files. Auto Layout is a cool new technology for making flexible user interfaces that can easily resize, which is useful on the iPad and for supporting the larger iPhone 5, but it only works on iOS 6 and up. It also has a bit of a learning curve, which is why you’re not using it in this tutorial. To learn more about Auto Layout, see our books iOS 6 by Tutorials and iOS 7 by Tutorials.

Dock显示了在这个scene中的top-level objects.每一个scene至少有一个view controller object,一个First Responder object和一个Exit item. 但是可以暗含其他的top-level objects. Dock方便使用connections to outlets和actions.如果你需要连接什么到view controller,你可以尝试简单drag他在dock中的图标。

Note: You probably won’t be using the First Responder very much. This is a proxy object that refers to whatever object has first responder status at any given time. It was also present in your nibs and you probably never had a need to use it then either. As an example, you can hook up the Touch Up Inside event from a button to First Responder’s cut: selector. If at some point a text field has input focus then you can press that button to make the text field, which is now the first responder, cut its text to the pasteboard.

如果你之前使用过nib app那么总是会有一个MainWindow.xib的文件。这个nib文件包含了top-level UIWindow object.一个app delegate的引用和一个或者多个view controllers。当你使用storyboard含纳你的app ui时,MainWindow.xib不再使用。那么storyboard又是如何被app加载的呢?

应用程序代理,打开AppDelegate.h可以看到:

这是个使用storyboards的要求,你的应用程序delegate需要继承自UIResponder并且有一个UIWindow的属性。如果查看AppDelegate.m,你会看到什么都没有。秘密在Ratings-Info.plist 文件中。

storyboards app使用关键字UIMainStoryboardFile或者Main storyboard file base name来指定当app启动时必须加载的storyboard名字。

当这个设置后,UIApplication在加载这个storyboard文件的时候会自动初始化这个storyboard中的第一个view controller,然后把它的views放到一个新的UIWindow object中去。这些都不需要自己写代码。在Project Settings窗口中的Deployment Info中也可以看到这个。

main.m文件中,

app delegate不是storyboard的一部分。你必须传递app delegate class的名字到UIApplicationMain(),否则无法找到它。

Just Add It To My Tab

这个Rating app有一个tabbed interface包含两个屏幕。利用storyboard非常容易创建这个tabs。

打开Main.storyboard,并且拖放一个Tab Bar Controller有两个view controllers附带。

两个view controllers每个对应一个tab。UITabBarController之所以称为container view controller是因为它包含一个或者多个view controllers.

container 关系被Tab Bar Controller和view controllers之间的arrows代表着。

Note: If you want to move the Tab Bar Controller and its attached view controllers as a group, you can ⌘-click to select multiple scenes and then move them around together. (Selected scenes have a thick blue outline.)

drag一个label到第一个view controller中并且设置文本为"First Tab".并且拖一个label到第二个view controller中去并命名为"Second Tab".

选择tab bar controller并且进到Attributes inspector中勾选box "Is Initial View Controller".

这时候会发现之前指向regular view controller的箭头指向了tab bar controller

这表明当你启动app的时候,UIApplication会讲tab bar controller包含进main screen. storyboard总是有一个单独的view controller被设计成initial view controller,即storyboard的入口点

Tip: To change the initial view controller, you can also drag the arrow between view controllers. 也可以拖拉箭头来指定initial view controller

运行app后的效果:

Note: If you connect more than five scenes to the Tab Bar Controller, it automatically gets a More… tab when you run the app. Pretty neat!

如果你连接了超过5个屏幕到tab bar controller,它会自动得到一个more的tab,非常灵巧

Storyboards Tutorial 01的更多相关文章

  1. Tutorial 01 4,5题

    .任务四: 程序设计思想:利用Math.random()产生一个char类型的字符,再利用for循环是他们相加,最后将他们放在一个消息框中输出.   程序流程图:   源程序:           p ...

  2. Vulkan Tutorial 01 开发环境搭建之Windows

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 相信很多人在开始学习Vulkan开发的起始阶段都会在开发环境的配置上下一些功夫,那么 ...

  3. Storyboards Tutorial 04

    设计好后运行发现没有任何变化,是空白的.这是因为你的tableview相关的delegate方法还在.所以首先要屏蔽或者删除在PlayerDetailsViewController.m 如下的操作 # ...

  4. Storyboards Tutorial 03

    这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...

  5. Storyboards Tutorial 02

    内容中包含 base64string 图片造成字符过多,拒绝显示

  6. OpenGL 学习笔记 01 环境配置

    以下教程仅适用于Mac下的Xcode编程环境!其他的我也不会搞. 推荐教程:opengl-tutorial  本项目Github网址       OpenGL太可怕了...必需得把学的记下来,不然绝壁 ...

  7. sqlzoo - SELECT from WORLD Tutorial 答案

    01.SELECT from WORLD Tutorial 01.显示所有国家的名称,大洲和人口. SELECT name, continent, population FROM world; 02. ...

  8. IOS 开发教程

    http://www.raywenderlich.com/category/ios http://www.raywenderlich.com/50310/storyboards-tutorial-in ...

  9. 30 分钟开发一个简单的 watchOS 2 app <oneVcat>

    Apple Watch 和 watchOS 第一代产品只允许用户在 iPhone 设备上进行计算,然后将结果传输到手表上进行显示.在这个框架下,手表充当的功能在很大程度上只是手机的另一块小一些的显示器 ...

随机推荐

  1. sqlserver 获取一个月有多少天

    --思路:给定日期的下一个月的1号减去1天,然后取datepart(DAY,dt) declare @dt varchar(10)select @dt='2013-11-20'select datep ...

  2. [oldboy-django][6其他]学习django网站推荐

    http://www.cnblogs.com/holbrook/archive/2012/02/19/2358704.html alex: http://www.cnblogs.com/alex371 ...

  3. idea调试查看mybitis发送的语句(引用)

    MyBatis 的配置文件 Configuration 中有相关属性,设属性即可,不用再放一个 log4j.properties 文件. <configuration> <setti ...

  4. C++ bitset类的使用与简介

    有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值.位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法.标准库提供了bitset类使得处理位集合更容易一些.要使 ...

  5. POJ-2159 最小费用最大流

                                                        Going Home 自己写的第一道费用流,图建好一波板子AC.不过还是有几个地方有点迷. 先来 ...

  6. eclipse删除svn下载的文件后如何恢复

    Team右键-->与资源库同步-->覆盖/更新

  7. Python的高阶函数小结

    一. 高阶函数定义 简而言之,Python的高阶函数就是指一个函数作为参数传递给另外一个函数的用法. 举一个最简单的高阶函数来说明: >>> def add(x,y,f): retu ...

  8. [luogu1707] 刷题比赛 [矩阵快速幂]

    题面: 传送门 思路: 一眼看上去是三个递推......好像还挺麻烦的 仔细观察一下,发现也就是一个线性递推,但是其中后面的常数项比较麻烦 观察一下,这里面有以下三个递推是比较麻烦的 第一个是$k^2 ...

  9. vs2017 出现“文件中的类都不能进行设计,因此未能为该文件显示设计器”问题处理

    今天拷贝了以前的一个项目.打算出一个新版本. 但是拷贝了sln文件后,去除掉以前的项目,新增了一个  winfrom项目中 出现了:文件中的类都不能进行设计,因此未能为该文件显示设计器.错误 百度了一 ...

  10. Reactor Cooling(ZOJ 2314)

    题意: 给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流躺物质. 并且满足每根pipe一定的流 ...