xcode6 一点击main.xcode 新建storyboardd退出怎么办

swift之第一个IOS程序(浏览web页面)
1、工程的建立
a、选择第二个(Greate a new Xcode project)
b、左边选择中的Application,右边Singl View Application,最后next
c、在Product Name输入程序名,比如fistIOS
d、选择程序存储位置
2、开始编码
a、文件说明 AppDelegate.swift 文件是IOS工程响应整个APP的文件,AppDelegate用于监听整个APP的事件(具体看最后面代码); ViewController.swift 主要用于编写控制视图的代码; Main.storyboard 故事板,将UI可视化工具成为故事板;
b、选择Main.storyboard,在中间视图,点击wAny hAny选择如下图所示相应大小,然后双击即可
c、在右下角可以看到控件的添加(直接拖过去即可),分别添加Button和WebView控件
d、右上角如下图所示,点击第二个圈圈那个图标,就可以看到第e步,视图右边会有代码
e、UI与视图控件关联 右键单击Button控件,会弹出如下菜单
找到Touch Down菜单项,在菜单项右侧有一个加号按钮,用鼠标选中拖动到代码区域,然后就给Button起一个名字,最后点击connect即可
同样右键单击WebView控件,找到New Referecing Outlet菜单项,同样的方法拖到代码空白区域,并给控件命名webview,就可看到下图所示
f、ViewController.swift,在函数button中添加代码
3、运行代码
(注意,可能模拟器太大,当看到白屏的时候,就往上拉一下,就可以看到一下内容)
点击&浏览网页按键&就可看到网页中相应内容
各个文件的代码注释说明:
实现一个可以浏览web页面的程序
1、AppDelegate.swift(应用程序代理,监听整个APP的事件)
AppDelegate.swift
Created by Emperor on 15/3/5.
Copyright (c) 2015年 Emperor. All rights reserved.
import UIKit
//AppDelegate用于监听整个APP的事件,比如当APP启动完成后,会调用application方法
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
//APP启动完成后调用
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -& Bool {
return true
func applicationWillResignActive(application: UIApplication) {
//APP进入后台时调用
func applicationDidEnterBackground(application: UIApplication) {
//APP进入前台时调用
func applicationWillEnterForeground(application: UIApplication) {
func applicationDidBecomeActive(application: UIApplication) {
//APP终止时调用
func applicationWillTerminate(application: UIApplication) {
2、Main.storyboard (故事板)
将UI可视化工具成为故事板(storyboard);
在这里添加一个Button和WebView控件
3、ViewController.swift(视图控制器)
ViewController.swift
Created by Emperor on 15/3/5.
Copyright (c) 2015年 Emperor. All rights reserved.
//功能:实现一个可以浏览web页面的程序
//主要用于编写控制视图代码。在该文件中实现了一个ViewController类,该类是UIViewController的子类,用于控制视图上得UI,在该类中默认生成了两个事件方法
import UIKit
class ViewController: UIViewController {
/*默认情况下,Main.storyboard和ViewController.swift关联了,所以可以将控件UI的代码写在
ViewController.swift文件中。在ViewController.swift中在比如web控件上右键,就会弹出一个菜单,找到&New Referecing Outlet&项,其右侧有一个加号,用鼠标拖到ViewController代码区域空白处即可(在xcode最右侧可以看到6个图标,选择第二个就可以在视图中看到视图相关联的代码); 按键控件的话就是选择Touch Down选项*/
//添加的webview变量,这个变量就是可以直接访问WebView控件(自己添加在Main.storyboard故事面板的)
@IBOutlet weak var webview: UIWebView!
//按键,按下按键后要做的事就在这里
@IBAction func onTouchDown(sender: AnyObject) {
var url = NSURL(string: http://blog.csdn.net/emperorzhi/article/details/);
var request = NSURLRequest(URL: url!);
webview.loadRequest(request);
//当视图装载时调用
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//当内存不足时调用
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'【记录】使用Xcode中的iOS SDK给iphone开发出第一个App程序
之前已经折腾过了,现在继续折腾,用iOS SDK开发移动设备(iphone/ipad/ipod touch)的程序。
1.从中找到了,所以就跟着教程去试试。
2.从教程中才知道,原来移动设备,是包括这三个:iPad, iPhone, and iPod touch
教程中也说了,会涉及到Xcode+iOS SDK,Objective-C,Cocoa Touch Framework,如何建一个iOS的app并且在设备上测试,以及如何提交app到App Store。
另外,关于是否需要注册成为Apple开发者:
写app和在模拟器上测app,是不需要的;但是想要在设备上测app和发布app则是需要的。
3.安装教程提示,去学习学习。
创建新项目,选择Single View Application:
其中,另外几个Template,教程解释道:
Master-Detail创建出来的程序就像Mail;
Tabbed创建出来的就像iTunes;
然后设置项目名字和配置:
然后选择一个地方存放你的项目,以及对于那个source repository不要选,然后就打开了项目了:
汗,好像写错项目名了,写成HelloWord了。。。
无所谓,继续。
暂时不需要Utility Area,所以去关闭该窗口:
然后点击Run,就可以看到iPhone模拟器出现了:
然后验证可以运行了,先退出iOS模拟器:
当前的Supporting Files中的main.m为:
相应的info list文件为:
storyboard为:
然后再打开Utility-&Attributes inspector:
按照教程去看,差点没看懂,差点没找到找到如何打开background配置界面的。
后来还是自己摸索出来的,先点击View Controller下面的View,然后右边的Attribute inspector自动就打开了配置界面了:
然后才看懂教程,原来最开始是要选择View的。。
然后就可以点击Background的那个白色长方形,在弹出的颜色设置中,设置自己所要的背景色了:
然后运行看看效果:
然后按照教程,在恢复回白色:
然后再运行一下,看看效果,顺带同时保持了你当前的设置。
然后接着去添加Text Field:
拖动放到View中,然后再通过View Controller-&View-&Text Field选中后,用鼠标拖动至合适的位置,比如:
再在placeholder中输入名字,再去设置对齐:
然后再把Label:
按照同样方法添加到View中:
再添加button:
然后命名为Hello:
然后去配置好Text Field:
然后运行试试效果。
点击按钮,是可以高亮的:
点击到Text Field可以调出键盘:
如教程所说,暂时没实现功能呢,所以暂时无法关闭键盘。
然后再按照教程,确保当前选中的是MainStoryboard.storyboard 然后,此时是可以看到对应的界面的,然后我这里右边会显示出CRLViewControl.h文件,而不是.m文件,而直接点击左边的CRLViewControl.m文件的话,此时Hello的界面没了,会变成CRLViewControl.m的内容,所以不是所想要的。
后来经过折腾发现,原来是在右边,显示了CRLViewControl.h的上面,点击图标,可以看到,有CRLViewControl.h和CRLViewControl.m两个,选择CRLViewControl.m:
即可出现对应的.m的内容,此时就可以继续操作了:
然后配置好connection:
然后点击Connet,然后会看到一个灰色的小圆点,移动上去,会看到Hello按钮显示出提示:
继续去添加Outlet:
然后填入参数,配置好:
教程提到了,现在编译器会自己给accessor methods做synthesize,所以不用再加@synthesize 了。
同样的,也去给label建立关联:
然后打开Utility,关闭Assistant,点击到Connections inspector,就可以看到各个连接关系了。
鼠标移动上去,就可以显示出来关系:
其实,就类似于VS 2010中,建立控件,比如label时,你所设置label的名字,而mac却把这label空间本身和其源文件.m中的变量,割裂开来,然后另外再手动建立两者的联系罢了。
再去设置Text Field的delegate:
不过话说,目前为止,好像还是不是很清楚这个delegate的作用。。。
选择Outlets中的delegate后,变为:
教程也说了,其实这些内容,都是可以手动去写代码的,只是让Xcode帮你自动生成,会减少你的代码输入量而已。
(也减少可能的由于笔误而造成的错误)
去Run了下,结果和之前一样,点击按钮会高亮,点击text field会调出键盘输入。
接着就是写代码了。
在CRLViewController.h添加了property
在CRLViewController.m中去实现对应的changeGreeting。
抄写代码过程中还觉得很奇怪,为何不直接使用textField.text而还要新建一个NSString来存放字符串。
看了后面教程的解释,才知道,原来是Mac中的model object决定的:
app的数据,是不应该让UI部分的东西来存放的,即此处app的将要显示的text内容,应该自己建一个NSString来保存,而不应该用textField的text部分来保存其要处理(要显示)的数据。
然后继续按照提示,添加delegate代码,最后Run成功如下:
至此,终于完成第一个iOS的app了。
虽然不是全懂,但是大概明白流程了。
共享此文章:
, , , , , ,
分类目录分类目录
选择分类目录
Uncategorized&&(10)
单身恋爱婚姻家庭&&(112)
&&&Lovestory&&(7)
&&&单身&&(21)
&&&婚姻&家庭&&(34)
&&&恋爱&&(46)
哲理 人生 故事&&(210)
&&&哲理佳句&&(39)
&&&电视剧《天道》&&(6)
&&&财富人生&&(44)
工作和技术&&(3,772)
&&&CharEncoding&&(4)
&&&&&&Unicode&&(1)
&&&CodeShare&&(17)
&&&CompilerLinkerParser&&(94)
&&&&&&ANTLR&&(92)
&&&&&&JavaCC&&(1)
&&&DevToolSoft&&(74)
&&&&&&Linux on Win&&(40)
&&&&&&&&&Cygwin&&(33)
&&&&&&&&&Gow&&(1)
&&&&&&&&&MingW&&(3)
&&&&&&&&&MSYS&&(3)
&&&&&&Putty&&(1)
&&&&&&Total Commander&&(2)
&&&&&&VersionControl&&(30)
&&&&&&&&&Git&&(20)
&&&&&&&&&SVN&&(8)
&&&Docbook&&(127)
&&&DocxyGen&&(1)
&&&Elance&&(6)
&&&Embedded&&(517)
&&&&&&BusyBox&&(2)
&&&&&&CrossCompiler&&(102)
&&&&&&&&&Buildroot&&(30)
&&&&&&&&&crosstool-ng&&(40)
&&&&&&Embedded Emulator&&(15)
&&&&&&&&&QEMU&&(15)
&&&&&&Embedded Filesystem&&(4)
&&&&&&&&&Yaffs2&&(2)
&&&&&&Embedded IDE&&(3)
&&&&&&&&&HEW&&(1)
&&&&&&&&&IAR&&(1)
&&&&&&Embedded OnChip Resource&&(2)
&&&&&&&&&Memory&&(2)
&&&&&&&&&&&&SDRAM&&(1)
&&&&&&Embedded OS&&(9)
&&&&&&&&&Realtime OS&&(2)
&&&&&&Embedded Peripherals&&(112)
&&&&&&&&&Bluetooth&&(21)
&&&&&&&&&CAN Bus&&(2)
&&&&&&&&&DMA&&(1)
&&&&&&&&&GPIO&&(1)
&&&&&&&&&Serial Communication&&(13)
&&&&&&&&&&&&RS232&&(10)
&&&&&&&&&&&&&&&SecureCRT&&(3)
&&&&&&&&&&&&RS485&&(2)
&&&&&&&&&Storage&&(73)
&&&&&&&&&&&&Flash&&(31)
&&&&&&&&&&&&SD/MMC&&(9)
&&&&&&&&&&&&USB&&(32)
&&&&&&Fieldbus&&(57)
&&&&&&&&&DTM&&(1)
&&&&&&&&&EDDL&&(10)
&&&&&&&&&HART&&(29)
&&&&&&&&&Modbus&&(1)
&&&&&&&&&Profibus&&(6)
&&&&&&&&&PROFINET&&(2)
&&&&&&Industrial Automation&&(59)
&&&&&&Linaro&&(1)
&&&&&&Linux Kernel&&(2)
&&&&&&MCU SoC IP-Core&&(11)
&&&&&&&&&ARM&&(4)
&&&&&&&&&NEC&&(2)
&&&&&&PLC&&(38)
&&&&&&Symbology_Barcode&&(6)
&&&&&&Thread&&(2)
&&&&&&Uboot&&(17)
&&&EncryptDecrypt&&(1)
&&&Hardware&&(13)
&&&&&&Opensource Hardware&&(10)
&&&&&&&&&pcDuino&&(7)
&&&IDE TextEditor&&(100)
&&&&&&Apatana Studio 3&&(2)
&&&&&&ATOM&&(4)
&&&&&&Eclipse&&(37)
&&&&&&Notepad++&&(5)
&&&&&&SciTE&&(1)
&&&&&&Source Insight&&(7)
&&&&&&Sublime Text&&(6)
&&&&&&Visual Studio&&(4)
&&&&&&Xcode&&(33)
&&&&&&&&&Instruments&&(1)
&&&&&&&&&iOS Simulator&&(1)
&&&Network&&(7)
&&&&&&SIP&&(1)
&&&&&&Wireshark&&(3)
&&&OS_Platform&&(669)
&&&&&&CentOS&&(5)
&&&&&&Linux&&(146)
&&&&&&&&&diff&&(4)
&&&&&&&&&Driver&&(36)
&&&&&&&&&gcc&&(1)
&&&&&&&&&makefile&&(13)
&&&&&&&&&NFS&&(2)
&&&&&&&&&patch&&(3)
&&&&&&&&&Wireless&&(7)
&&&&&&Mac&&(38)
&&&&&&&&&Cocoa&&(1)
&&&&&&&&&iphone&&(1)
&&&&&&MobilePlatform&&(433)
&&&&&&&&&Android&&(267)
&&&&&&&&&&&&Android Studio&&(15)
&&&&&&&&&&&&Osmand&&(5)
&&&&&&&&&iOS&&(166)
&&&&&&&&&&&&Carthage&&(1)
&&&&&&&&&&&&Swift&&(109)
&&&&&&&&&&&&&&&Realm&&(1)
&&&&&&Ubuntu&&(38)
&&&&&&Windows&&(9)
&&&pneumatic&&(1)
&&&ProgrammingLanguage&&(741)
&&&&&&C&&(48)
&&&&&&C#&&(161)
&&&&&&GO&&(47)
&&&&&&Java&&(50)
&&&&&&&&&JSP&&(1)
&&&&&&&&&Openfire&&(10)
&&&&&&&&&Spark&&(1)
&&&&&&Object-C&&(6)
&&&&&&Perl&&(4)
&&&&&&PHP&&(151)
&&&&&&&&&Drupal&&(16)
&&&&&&&&&Joomla&&(4)
&&&&&&&&&MediaWiki&&(4)
&&&&&&&&&WordPress&&(90)
&&&&&&Python&&(253)
&&&&&&&&&BeautifulSoup&&(11)
&&&&&&&&&Django&&(7)
&&&&&&&&&Python GUI&&(3)
&&&&&&&&&Python IDE&&(14)
&&&&&&&&&Python3&&(8)
&&&&&&&&&StringEncoding&&(16)
&&&&&&R&&(5)
&&&&&&VB.Net&&(5)
&&&&&&VBA&&(11)
&&&RegularExpression&&(54)
&&&&&&Android regex&&(3)
&&&&&&C# Regex&&(1)
&&&&&&dreamweaver regex&&(1)
&&&&&&EditPlus TR1&&(1)
&&&&&&Java regex&&(6)
&&&&&&Notepad++ regex&&(1)
&&&&&&Perl //&&(1)
&&&&&&PHP preg_match&&(1)
&&&&&&Python re&&(30)
&&&&&&UltraEdit 3 type regex&&(1)
&&&&&&VB.NET Regex&&(1)
&&&Soft Dev Basics&&(21)
&&&TechMaterialDownload&&(27)
&&&technical_fun&&(2)
&&&TechnicalLife&&(20)
&&&tmp_todo&&(103)
&&&Virtual Machine&&(78)
&&&&&&VirtualBox&&(42)
&&&&&&VMWare&&(29)
&&&Web_Technology&&(345)
&&&&&&BBS&&(8)
&&&&&&Crawl_EmulateLogin&&(75)
&&&&&&&&&Amazon&&(29)
&&&&&&&&&eBay&&(9)
&&&&&&&&&Scrapy&&(6)
&&&&&&&&&Taobao&&(1)
&&&&&&CSS&&(6)
&&&&&&Google&&(32)
&&&&&&&&&Google Adsense&&(28)
&&&&&&HTML&&(5)
&&&&&&JavaScript&&(25)
&&&&&&&&&easyUI&&(2)
&&&&&&&&&KindEditor&&(3)
&&&&&&&&&Node.js&&(10)
&&&&&&JSON&&(22)
&&&&&&MySQL&&(3)
&&&&&&Skydrive&&(5)
&&&&&&Tencent&&(1)
&&&&&&UML&&(2)
&&&&&&VirtualHost&&(68)
&&&&&&&&&cPanel&&(3)
&&&&&&&&&hawk&&(11)
&&&&&&&&&sugarhosts&&(7)
&&&&&&&&&TransferWebHosting&&(16)
&&&&&&WebServer&&(5)
&&&&&&&&&apache&&(4)
&&&&&&&&&nginx&&(1)
&&&&&&WeiXin&&(6)
&&&&&&WLW&&(24)
&&&&&&XML&&(3)
&&&&&&&&&XPath&&(2)
&&&&&&XMPP&&(1)
&&&wiki&&(2)
&&&经验和教训&&(9)
有意义&&(637)
&&&值得看的东东&&(138)
&&&新闻与社会&&(196)
&&&日本&&(13)
&&&看图不说话&&(113)
&&&罗永浩[老罗]&&(18)
有趣&&(850)
&&&多收了三五斗&&(21)
&&&开心西游记&&(43)
&&&笑话幽默&&(106)
&&&脑筋急转弯&&(19)
&&&视频&&(22)
&&&超强男女经典征婚启事&&(9)
生活&&(1,443)
&&&Tmp&&(9)
&&&个人推荐&&(84)
&&&信息记录&&(4)
&&&历史&&(3)
&&&安徽&&(12)
&&&心情与思考&&(65)
&&&文学&&(13)
&&&旅游&&(24)
&&&楼市与住房&&(308)
&&&&&&日常生活&&(3)
&&&&&&海德公园&&(39)
&&&&&&装修&&(223)
&&&&&&&&&卫浴&&(1)
&&&&&&&&&吊顶&&(1)
&&&&&&&&&地暖&&(50)
&&&&&&&&&地板&&(2)
&&&&&&&&&家电商场&&(1)
&&&&&&&&&封阳台&&(1)
&&&&&&&&&建材市场&&(9)
&&&&&&&&&整体橱柜&&(8)
&&&&&&&&&瓷砖&&(6)
&&&&&&&&&&&&木纹砖&&(3)
&&&&&&&&&空调&&(1)
&&&&&&&&&衣柜&&(1)
&&&&&&&&&装修日记&&(117)
&&&&&&&&&门&&(2)
&&&淮安&&(3)
&&&游戏&&(14)
&&&电影&&(1)
&&&电脑+数码+软件&&(607)
&&&&&&360&&(2)
&&&&&&Firefox&&(17)
&&&&&&数码电玩&&(167)
&&&&&&&&&I9100G&&(71)
&&&&&&&&&U盘量产&&(3)
&&&&&&&&&华为手机&&(22)
&&&&&&&&&安卓手机&&(5)
&&&&&&&&&老人机&&(1)
&&&&&&电信&&(2)
&&&&&&电脑_生活&&(9)
&&&&&&电脑知识&&(80)
&&&&&&笔记类软件&&(4)
&&&&&&&&&为知笔记&&(1)
&&&&&&&&&印象笔记&&(2)
&&&&&&系统使用&&(115)
&&&&&&&&&Mac系统&&(37)
&&&&&&&&&Windows系统&&(78)
&&&&&&&&&&&&win10&&(6)
&&&&&&网上银行&&(27)
&&&&&&&&&PayPal&&(1)
&&&&&&&&&中行BOC&&(13)
&&&&&&&&&华夏hxb&&(1)
&&&&&&&&&工行ICBC&&(5)
&&&&&&&&&招行&&(1)
&&&&&&&&&支付宝&&(3)
&&&&&&路由器&&(7)
&&&&&&软件使用&&(152)
&&&&&&&&&chrome&&(3)
&&&&&&&&&Excel&&(8)
&&&&&&&&&google&&(6)
&&&&&&&&&&&&goagent&&(4)
&&&&&&&&&IE&&(1)
&&&&&&&&&Office&&(3)
&&&&&&&&&Outlook&&(5)
&&&&&&&&&PDF&&(2)
&&&&&&&&&PicPick&&(1)
&&&&&&&&&PowerPoint&&(1)
&&&&&&&&&QQ&&(14)
&&&&&&&&&shadowsocks&&(3)
&&&&&&&&&Thunderbird&&(14)
&&&&&&&&&Word&&(13)
&&&&&&&&&网易163&&(5)
&&&&&&&&&&&&邮箱&&(1)
&&&&&&&&&翻墙&&(9)
&&&经济&&(15)
&&&网上购物&&(17)
&&&美食&&(8)
&&&羽毛球&&(22)
&&&苏州&&(57)
&&&&&&工业园区&&(2)
&&&&&&&&&独墅湖高教区&&(2)
知道&&(180)
&&&English&&(60)
&&&生活百科&&(23)
&&&网络资源下载&&(45)
笔记本相关&&(533)
&&&买本前必看&&(33)
&&&无线和迅驰及其相关&&(10)
&&&电脑知识扫盲&&(12)
&&&神舟资料整理&&(342)
&&&&&&别人对神舟的无端诋毁&&(7)
&&&&&&某些笔记本价钱贵但毛病也不少&&(24)
&&&&&&神舟本网站评测&&(7)
&&&&&&神舟电脑评测&&(151)
&&&&&&神舟相关&&(103)
&&&&&&神舟笔记本好的方面的例子&&(17)
&&&&&&给不熟悉的人的解答&&(26)
&&&笔记本cpu&&(26)
&&&笔记本显卡&&(36)
&&&笔记本显卡游戏效果&&(27)
&&&走出笔记本使用误区&&(6)
&&&走出笔记本购买的误区&&(14)
&&&降频功耗散热&&(11)
音乐天堂&&(526)
&&&歌曲类型&&(437)
&&&&&&Hiphop_R&B_Rock&&(23)
&&&&&&中文歌曲&&(160)
&&&&&&外文歌曲&&(200)
&&&&&&纯音乐&无歌词&&(54)
&&&特定歌手&&(38)
&&&&&&Enigma&&(11)
&&&&&&Linkinpark&&(14)
&&&&&&陈琳&&(13)
&&&音乐下载&&(1)
&&&音乐知识&&(9)
默认分类&&(212)
&&&默认分类&&(3)
2016年七月
11121314151617
18192021222324
25262728293031
免费的格式化Javascript源码的网站
查询Unicode字符,且还带Oct,Decimal,Hex,HTML Entity
HTML和Javascript都支持,很好用。上一篇:下一篇:相关资讯(01月21日)(01月21日)(01月21日)(06月02日)(04月07日)最新资讯(06月02日)(04月07日)(03月24日)(02月23日)(02月22日)IOS培训视频IOS培训课程
IOS教程网站导航 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证号-56下次自动登录
现在的位置:
& 综合 & 正文
Storyboard和属性自动绑定
从Xcode 4.3开始,Storyboard 就是iOS
5和iOS 6中令人兴奋的一个新特性,他将为你在创建用户界面上节省很多时间。 那么究竟什么是Storyboard呢?我将用一幅图片来向你展示: 下面这个就是本实例中即将用到的Storyboard。
关于故事板编程,我在“ 03——Storyboard类及使用”一文中已经有描述。你或许不能精确的知道这个应用是做什么的,但是你可以清楚的看到它有哪些屏幕界面,这些屏幕界面之间是怎样互相关联的。这就是Storyboard的强大之处。
如果你的应用有很多个不同的屏幕界面,Storyboard则可以减少那些用于在这些界面之前来回切换的中间(glue
code)。现在你的应用,用一个Storyboard就可以包含所有控制器的界面设计和他们之间的关系, 而不再需要为每一个控制器分别再创建一个nib文件。
Storyboard和普通的nib相比有很多优点。
借助Storyboard,你可以对你应用中所有的界面和它们之间的联系有一个更好的概念上的总览。
因为所有的设计都在单个文件中,而不是分布成许多nib文件, 可以更加容易的找到任何东西。
Storyboard表明了各个界面之间的切换规则。
这些切换规则叫做“segues”, 按住ctrl键,从一个控制器拖动到另一个就可以创建它们。多亏了segues,能让你用更少的代码来处理UI。
Storyboard让UITableView使用起来更加简单,
它提供了原型单元格(prototype cells)和静态单元格(static cells). 你几乎可以完全在Storyboard编辑器中来设计你的UITableView,大大减少了你的代码量。
并不是所有的事情都那么完美,当然,Storyboard也有一些局限性。 Storyboard编辑器还没有像Interface
Builder那么强大,还有少数的一些功能,IB可以实现,但是Storyboard编辑器不能完成。你也需要一个大显示器,特别是在设计iPad应用时。
如果你是那种讨厌使用Interface Builder,只愿意编码实现整个UI的人,
那么Storyboard大概不是为你准备的。 从我个人来说,我更希望代码量越少越好,特别是UI代码,所以这个工具对我来说可是个好东西。
你还可以在iOS 6 和Xcode
4.5中使用nib文件。虽然我们现在有了Storyboard,使用Interface
Builder也不是不可以。如果你要继续用nib并且一直用下去, 但是你也可以将Storyboard和nib一起使用。
这不是一个必须二选一个问题。
在本实例中,我们用最新的iOS
6 in Xcode4.5新特性编程,你将会看到可以用Storyboard来做什么。
我们将要创建的应用可能会看起来没什么意义,但是它向你展示Storyboard最常用的那些操作。
打开Xcode4.5并且创建一个新项目StoryboardTest。
使用Single View Application模板作为我们的起点。然后从这里开始构建我们的应用。
如下填写模板选项:
Product Name:
StoryboardTest
Company Identifier:
com.***格式
Class Prefix: 空
Device Family:
Use Storyboard: 使用
Use Automatic Reference Counting: 使用
Include Unit Tests: 空
Xcode 4.5创建好项目后,Xcode主窗口显示如下:
我们的新项目里有两个类,AppDelegate和ViewController,
还有这个教程的主角MainStoryboard.storyboard。 注意了,这次项目中没有 .xib 文件,也没有MainWindow.xib。
让我们看一看Storyboard。 在左边的项目导航中点击MainStoryboard.storyboard 来打开Storyboard编辑器:
Storyboard编辑器看起来很像Interface
Builder。 你可以从Object Library(屏幕右下角)中拖动控件到View
Controller中来设计布局。 不同的是,Storyboard不是仅仅包含一个控制器,而是你应用中所有的控制器。
控制器,在Storyboard的官方术语中叫做”scene”, 不过 “scene“ 其实就是一个视图控制器。
在这之前,你会为每一个Scene/控制器来创建一个nib文件, 但是现在所有的这些都包含在一个Storyboard中。
在iPhone中一次只能显示这些scene中的一个,
但是在iPad中,你可以同时显示多个, 例如UISplitView或者是Popover。
为了进一步的感受编辑器是如何工作的,拖动一下控件到控制器的空白区域吧。
左边栏是文档的大纲:
在Interface Builder中,这个区域列出了nib中的组件,但是在Storyboard编辑器中,他显示了所有的视图控制器中的内容。现在我们的Storyboard中仅仅有一个视图控制器,但是随着教程的演进,我们将会添加更多的控制器。
在 Scene 下方,有一个迷你版的文档大纲,叫做Dock:
Dock显示了scene中最顶级的组件。
每个scene至少有一个First Responder和一个View
Controller对象, 但是他也可以拥有其他的顶级组件。 后面会更多的讲解。 Dock可以方便的建立连接。 如果你想将一些其他的东西连接到控制器, 你可以把他的图标拖动到Dock上面。
注意: 你或许没怎么用过 First
Responder 。 这是一个代理对象,用于指向当前作为第一事件响应者(first responder)的对象。 它也出现在 Interface
Builder 中, 你看可能从来没有用过它。 举个例子,你可以将一个按钮的 Touch Up Inside 事件绑定到 First
Responder的 cut: selector 上。 如果在某一时刻,一个文本框得到了焦点,那么你就可以按下那个按钮,让这个作为First
Responder 的文本框,来剪切它里面的文本到剪贴板上。
运行这个应用, 你应该可以看到它显示的内容和我们在编辑器中设计的完全一样:
如果你之前创建过基于nib的应用,那么你会一直有一个MainWindow.xib文件。
这个nib文件包含了一个顶级元素UIWindow, 一个App
Delegate的引用,和一个或多个视图控制器。 当你将应用的UI搬到Storyboard后,
就不再需要MainWindow.xib文件了。
那么,如果没有MainWindow.xib文件, Storyboard是如何被加载的呢?
让我们来看一下应用的delegate文件, 打开AppDelegate.h,
你将会看到如下内容:
@interface AppDelegate
: UIResponder &&/SPAN&UIApplicationDelegate&
property (strong, nonatomic) UIWindow *
要使用Storyboard,你的应用代理对象就必须继承UIResponder(以前都是直接继承自NSObject),并且还有一个UIWindow属性(和以前相比,这个属性不再是一个IBOutlet)。
如果你再看一下 AppDelegate.m , 你会发现它没有做任何事情,
所有的方法都是空的。 即使是 application:didFinishLaunchingWithOptions: 方法, 也只不过简单的返回了一个YES。
在以前,这里会把主视图控制器的视图添加到window上面,或者将window设置到rootViewController属性上面,但是现在,这些都不需要了。
这个秘密就在于Info.plist文件中, 点击StoryboardTest-Info.plist文件(在Supporting
Files分组中), 你将会看到下面的内容:
在基于nib的项目中,这里会有一个名为NSMainNibFile键,或者叫”Main
nib file base name”, 它会告诉UIApplication去加载MainWindow.xib,
然后把它关联到应用中。 而我们现在的Info.plist已经没有这些设置了。
Storyboard应用会使用一个叫做UIMainStoryboardFile的键,或者叫做“Main
storyboard file base name”, 来指定应用启动时要加载的Storyboard名称。 当检测到这个设置后,UIApplication将会加载 MainStoryboard.storyboard 文件,并且自动实例化其中的第一个视图控制器,
同时把它的所有视图放到一个新的UIWindow对象中。 不需要写任何代码。
你也可以在Target Summary中看到这些:
这里面有一个新的iPhone/iPod Deployment Info选项让你来选择是使用Storyboard还是nib文件来启动应用。
为了保持教程的完整性,让我们再来看看main.m里面有什么:
#import "AppDelegate.h"
int main(int argc, char *argv[])
<p align="left" style="margin-top:0 margin-bottom:5 padding-top:0 padding-bottom:0 border:0 list-style: word-wrap: word-break: lin
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 xcode7 storyboard 的文章

 

随机推荐