2KB项目,专业的源码交易网站 帮助 收藏 每日签到

创建一个简单的 iOS 5 iPhone App 教程 (2/3)

  • 时间:2019-01-23 18:44 编辑:2KB 来源:2KB.COM 阅读:353
  • 扫一扫,手机访问
  • 分享
摘要:
iOS 英文原文:How To Create a Simple iPhone App on iOS 5 Tutorial: 2/3

这个文章是“如何创建一个简单iPhone应用”三部曲的第二部分,这个三部曲主要针对初学者。这个应用是评比最吓人虫子的应用。

第一部分, 我们创建了一个应用,它在table view中包含了一系列虫子。

在这个部分文章中,我们会学习如何创建一个详细视图(detail view),在那里可以查看虫子的大图片,给它们打分,替换它们的图片!

在三部曲的 第三部分 , 我们会学习如何添加一个新虫子,给我们工程添加一个图标和缺省图片,和怎么处理长时间运行的操作。

那么让我们开始弄些虫子吧!毕竟,无论什么程序都会有bug吗?:]

View Controllers, 天啊!

现在我们有了一列虫子了,如果点击一个虫子,就弹出一个屏幕可以编辑虫子的名字,图片,评分,那就更好了。

大部分情况下,在iPhone应用中,每一个"界面"(“screen”)都有一个“View Controller”类的对象代表那个界面。现在我们MasterViewController在启动时显示出来了,它包含了一个table view. 我们想当点击一个虫子时,它会打开DetailViewController, 显示这个虫子的一些信息。

当我们第一次运行这个模板工程时,它可以工作,但当我们改变了显示在table view的对象后,点击table view的某一行不再发送正确的对象给detail view(这是我们的bug,不是XCode’s NSDate 工程模板的bug)。我们会回头修复它。

每一个“View Controller”可以包含多个view。在我们的table view controller, 我们只有一个view –  table view. 然而在我们的details view controller, 我们需要一组view – 一个view显示虫子的名字,一个view显示图片,一个view用来评分,和其他的一些view。

下载点材料

说起这个,在详细内容里我们需要一个5星评分视图,但是iPhone默认没有提供。不过我最近写了一个名为《在iOS5里怎样创建自定义UIView:一个5星评分视图》的教程,所以我们在这里重复使用这个教程。

不要太担心这个教程(除非你喜欢这个教程)–相反你只需要下载我放在项目里的 Extra Stuff for Scary Bugs这个包。

继续,下载了这个包之后:

  • 在XCode里创建一个组,命名为Views,然后把 RateView.h/RateView.m拖动到这个组。确保“Copy items into destination group’s folder (if needed)” 复选框被选中。同样要确保target “ScaryBugs” 被选中。这就是教程里五星评分视图的代码。
  • 对UIImageExtras做的操作一样,除了把他们拖动到一个新创建的名为“Helpers”的组 。 这是一些辅助代码,稍后我们调整图片大小时会用到。
  • 对三张震惊表情的脸谱图片重复同样的操作,除了把它们拖到新创建的名为“Art”的组,这些图片是我亲爱的老婆做的。处于幽默的本能,这些图片将被我们用来表示评分视图中的“星星”:]
  • 对logo1.png重复同样的操作,同样拖到“Art”组中,一会我们要用它来设置程序的图标。

用Storyboard编辑器对我们的Detail View Controller进行布局

好了 – 现在我们终于准备好开始了! 打开MainStoryboard.storyboard, 如果你将滚动条拉到足够靠右的位置,你会看到模板为我们默认生成了Detail View Controller,并且带有一个内容为“Detail view content goes here” 的标签:

The detail view controller in the storyboard editor

Storyboard编辑器提供了一种可视化的方式,以方便你用XCode构建UI。你可以把UI元素拖放到你的视图上,用你想要的方式设置它们的属性值,甚至你可以在View Controller类里把元素连接到属性。

理解这些最容易的方式是亲自试一下!首先,在view controller上点击一下,并且打开EditorCanvasShow Bounds Rectangles(译者注:指的是菜单栏上的Editor) – 这样我们在屏幕上布局控件的时候会容易些。

删除内容为“Detail view content goes here”的标签 – 我们不需要它!

然后来看面板的右下部分,确保Object Libray的第三个选项卡是被选择了的。拖拽一个UITextField,UIImageView和一个UIView到文字屏幕上并如下图所示安排(文字栏Text Filed在上方)

Laying out the interface in the storyboard editor

然后选择侧边栏上部的UITextField,确保第四个选项卡(属性检查工具)被选择,如此我们可以修改某些属性。

设置字体为CustomHelveticaBoldSize 18.0,文字居中,当编辑时,清除按钮的行为是"Appears While Editing",Capitalzation选择Words,如下

Setting text field attributes

然后,点击第四个选项卡转到尺寸检查工具(Size Inspector)设置自动大小调整属性。如下

Autosizing Attributes

这样当我们的视图(View)旋转到横向显示时,文本框(Text Field)在屏幕上伸展会变得更宽。

下来让我们设置UIImageView. 在等四个tab页(Attributes Inspector) 设置模式为“Aspect Fit”, 在第四个tab (Attributes Inspector) 和第五个tab (Size Inspector) 设置自动缩放(autosizing) 属性为下面的值:

Autosizing Attributes

这会使Image View放大或者缩小时,在保持它的边界到屏幕的边界的距离不变的同时,按照图片的宽高比来缩放图片尽可能的填充可用的空间。

对于UIView, 跳转到第三个tab (Identity Inspector)设置类标示(Class Identity)为“RateView”,我们的五星评分view将显示在那里。然后再第五个tab (Size Inspector) 设置自动缩放(autosizing)属性为下面的值:

Autosizing Attributes

这使它缩放时,在保持一样的高度的情况下,左右拉伸。

到现在为止,一切都很棒!下来我们需要添加一些控件到屏幕上,这样用户可以点击UIImageView区域来改变图片。

我们有好几个办法来做实现这个功能,但最简单的一个是创建一个不可见的按钮覆盖在UIImageView上面, 然后设置好按钮点击时的回调函数。我们还可以添加一个UILabel 在图片底层,当没有图片显示时,这个UILabel显示“点击改变图片”(“Tap to Change Picture”).

所以从库里拖拽一个圆角矩形按钮(Round Rect Button),然后调整坐标和UIImageView一样。为了使它不可见,在第四个tab(Attributes Inspector) 修改类型为Custom。然后在第五个tab (Size Inspector)设置自动大小属性为下面的值:

Autosizing Attributes

最后,从库里拖拽一个UILabel, 放在UIImageView中间, 然后双击它编辑文本为"点击改变图片"(“Tap To Change Image.”) 然后修改文本对齐属性(text alignment)为居中(center). 同样在XIB中拖拽UILabel向上几个位置使它可以在UIImageView后面 (这个列表顺序是从底层到上层):

Setting the label to show up in the back

然后在第五个tab (Size Inspector) 设置自动大小(autosizing)属性为下面的值:

Autosizing Attributes

往下进行前,你可以通过下面的方法再次检查所有的自动大小(autosizing)属性已经正确设置。先选择Detail View Controller, 然后在第四个tab (Attributes Inspector) 把方向从纵向的肖像方式(Portrait)修改为横向的风景画方式( Landscape):

Testing autosizing attributes and orientation changes work OK in Storyboard editor

如果有些地方不对的话,不要担心 – 只需要修改回肖像方式(Portrait)然后再次仔细检查设置。

酷! 我们已经添加完所有需要的控件,然后我们需要把这些控件和我们类中相应的outlet关联起来。

首先,我们要先切换到助手编辑器(Assistant Editor) (点击顶上工具栏“Editor” 段下的第二个按钮), 要确保它设置为AutomaticDetailViewController.h:

Bringing up the assistant editor

然后按着control键,同时鼠标左键拖拽UITextField到DetailViewController.h, 在@end之前释放. 然后会弹出一个弹出窗口让你把UITextField关联到你的类中的一个属性。在名字(Name)编辑框里输入titleField, 然后点击 Connect按钮.

Connecting the title field to an outlet

重复同样的步骤,关联image view (但是关联的outlet命名为imageView),关联Rate View (但是关联的outlet命名为rateView).

我们同样想当按钮点击时,关联到一个我们类的方法被回调。为了实现这个功能,按control键同时,左键拖拽按钮到@end之前 — 就像你关联其他view一样的操作—然而这次connection下拉列表选择Action,在name编辑框输入 addPictureTapped, 然后点击Connect按钮.

Connecting a button to a method in the Storyboard editor

注意,事件(Event)下拉框缺省选择为“Touch Up Inside”。这个缺省选项是对的,因为这意味着,当用户的手指在按钮里面抬起时 (也就是,他们点击了这个按钮), 我们的方法被调用。

你也可以关联其他动作(actions)到回调函数。例如,在文本框的文字改变时会触发一个动作,我们想这时触发一个回调函数。

为了实现这个功能,按control键,拖拽UITextField到@end之前,在弹出窗口,同样设置为动作(Action). 缺省的事件(event)设置为Editing Did End – 修改它为Editing Changed. 修改这个方法的名字(Name)为titleFieldTextChanged, 然后点击Connect按钮.

我们最后要做的一件事是设置我们的类为文本框的委托(delegate)。有时只是接收view的动作的回调是不足够的 - 这些view可能还有些其他信息需要告诉我们,例如这次的文本框就是个例子。

为了实现这个功能,按control键同时点击Text Field,然后从弹出菜单的"delegate"菜单项的右边的小圆圈拖出一条线到Detail View Controller, 然后释放.

Setting the delegate of a text field

在这时,你的DetailViewController.h应该看起来像下面这样:

#import <UIKit/UIKit.h>
 
@interface DetailViewController : UIViewController
 
@property (strong, nonatomic) id detailItem;
 
@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
@property (weak, nonatomic) IBOutlet UITextField *titleField;
@property (weak, nonatomic) IBOutlet RateView *rateView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
- (IBAction)addPictureTapped:(id)sender;
- (IBAction)titleFieldTextChanged:(id)sender;
 
@end
你可能注意掉上面有一些特别的类型 – IBOutlet 和 IBAction. 为了关联我们在inerface builder添加的控件到我们类的属性,Storyboard编辑器会查找的 “神奇关键字”。基本上,如果我们把 IBOutlet 或者 IBAction 添加在属性或者方法声明中,Interface Builder 就会探测它们,后续用于联接。 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部