从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8

上传人:E**** 文档编号:117917855 上传时间:2019-12-11 格式:PDF 页数:19 大小:1.48MB
返回 下载 相关 举报
从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8_第1页
第1页 / 共19页
从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8_第2页
第2页 / 共19页
从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8_第3页
第3页 / 共19页
从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8_第4页
第4页 / 共19页
从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8》由会员分享,可在线阅读,更多相关《从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8(19页珍藏版)》请在金锄头文库上搜索。

1、从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter8 ? 版权声明: 原文及示例代码来自raywenderlich store中的iOS Apprentice 系列2教程,经过翻译和改编。 版权归原作者所有,本系列教程仅供学习参考使用,感兴趣的朋友建议购买原教程(http:/ ? 欢迎继续我们的学习。 ? 在上一章的内容中我们学会了在storyboard中添加一个新的界面,同时还了解了segue和视图控制器 容器的概念。似乎稍微有点抽象,不过我们将不断的重复,直到你可以完全理解。 ? 现在Add Item界面中只是一个空白的表,然后在顶部有一个导航栏,但我们想要一个类似下面的

2、界 面: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 为此,在Xcode中切换到storyboard, 选中Add Item界面中的Table View对象,然后在Xcode右侧的 面板中切换到Attributes inspector,将Content的设定从Dynamic Prototypes更改为Static Cells。 ? ? ? ? 如果我们在设计的时候就知道在表视图中要放多少个section和行,就需要用到static cells。对于这 种需要用户输入信息的界面,static cells尤其合适。我们可以

3、在storyboard中直接设计行。对于带有 static cells的行,我们无需提供数据源。而且我们可以直接降cell中的标签和其它控件和视图控制器 中的属性关联在一起。 ? 此时观察Xcode左侧面板,会看到Table View对象下面有了一个Table View Section,然后在这个 Section里面有三个Table View Cell对象。 ? 选中下面的两个Table View Cell对象,用delete键将其删除,因为我们只需要有一个cell就够了。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 再次选中Table View对象,然后在Xcode右

4、侧面板中切换到Attributes inspector,然后将Style属性更 改为Grouped,这样就得到了我们希望的视觉效果。 ? ? ? 接下来我们需要在table view cell对象中添加一个text fi eld(文本域),从而可以让用户在里面输入 文字。 ? 从Xcode右下的Object Library中拖出一个Text Field对象到cell中,然后根据需要调整它的大小。选 中这个Text Field对象,在Xcode右侧面板中切换到Attributes inspector,然后将Border Style设置为 none(也就是最左侧的选项)。 ? ? ? ? 再次编译

5、运行应用,然后触碰首界面的”+”按钮来打开Add Item 界面。触碰cell单元格,就可以看到 底部出现一个虚拟键盘。 ? 每当我们选中文本域的时候,虚拟键盘就会自动出现。我们可以输入自己希望的内容。 ? ? 不过有一个小小的瑕疵,如果触碰文本框之外cell之内的区域,会发现该行变灰了。这是因为此时程 序以为我们要选中当前行,实际上则不是我们想要的效果。 ? ? ? ? ? ? ? ? ? ? ? ? ? 因此这里需要修补一下。 在Xcode中切换到AddItemViewController.m,然后在end前添加一个方法如下: ? -(NSIndexPath*)tableView:(UIT

6、ableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath return nil; ? 这里我们再次认识到一个新的表视图代理方法。当用户触碰某一行的时候,表视图会向代理发送一 条willSelectRowAtIndexPath消息:“代理你好,我现在要选中某一行了。”通过返回一个nil,代理对 此的答复是:“不好意思,恐怕你没有这个权限这么做!” ? 除此之外,为了防止这一行变灰,还需要做一件事。尽管我们现在已经禁止用户选中这一行,但cell 却有一个Selection Color属性。在默认状态下被设置为Blu

7、e(因为历史的原因被命名为Blue,实际上 却是灰色的)。记住row(行)和cell是两回事,对row禁止的事情cell可不在乎。 既然cell属于视觉元素,显然我们需要在storyboard中来设置。 切换到Main.storyboard,选中table view cell对象,然后在Xcode右侧面板中切换到Attributes inspector,将Selection 属性设置为None,就搞定了。 ? 再次编译运行,就不会出现这种恼火的现象了。 ? ? 稍事休息,让我们看看return 语句是怎么回事。 ? 在之前的学习中我们已经几次接触到return 语句了。通常我们使用return

8、 语句返回一个值到调用该 方法的方法。看看下图: ? 某个方法会调用另一个方法,并接收所返回的值。你不能随意返回任意类型的值,所返回的值的数 据类型必须是方法名称中所设置的。比如,tableView:numberOfRowsInSection:方法必须返回一个 NSInteger类型的数值,因为方法名称之前有一个(NSInteger): ? - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section return 1; ? ? NSInteger其实是int在Objective

9、-C中的另一种名称,因此return 1就意味着返回了一个整数1. ? 不过你可以试着把代码改为: ? - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section return ”1”; 毫无疑问编译器是会给出红色错误提示的,因为“1”是一个字符串,而不是一个NSInteger整数。对 于任何一个人类来说,两者看起来差不多,我们都可以理解。但Objective-C就不能忍受了。数据类 型必须完全匹配,否则就会被给出红牌警告。 ? 当然我们见到过类似下面的代码: ? - (NSI

10、nteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section return _items count; ? 这个返回语句是有效的,因为一个NSArray对象的count方法会返回一个NSUInteger类型的数值。在 Objective-C中,我们经常会看到NSInteger,NSUInteger和int的混用,它们之前的区别不大,你也没 有必要去深究,只需要知道这三种类型都同样代表整数。 ? tableView:cellForRowAtIndexPath:这个方法返回的是一个UITable

11、ViewCell对象: ? - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath UITableViewCell *cell = tableView dequeueReusableCellWithIdentifi er:“ChecklistItem“; . return cell; ? 返回一个NSInteger整数和返回一个UITableViewCell对象的区别在于,NSInteger不属于对象,而 UITableViewCell则属于对象

12、。从视觉上看,在方法名之前的括号中对于对象会有一个*,如果一个 名称后面跟着一个*星号就表示你在和对象打交道。其它的被称为primitive types(基本数据类 型)。 关于基本数据类型和对象之间的差别,我们会在下一系列的教程中涵盖,就目前来说,只需要盯住* 就行了。 ? 又比如,tableView:willSelectRowAtIndexPath:方法会返回一个NSIndexPath对象。但如果让其返回 一个nil,就代表没有对象。 ? - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath

13、:(NSIndexPath *)indexPath return nil; ? ? 如果一个方法需要返回一个对象,我们可以返回一个对象,也可以返回nil。当然,返回nil是件有风 险的事情。比如,如果你在cellForRowAtIndexPath方法中返回nil,那么应用就会崩溃。有些方法必 须返回对象,有的则可以返回nil,那么苦逼程序猿怎么知道究竟是哪种情况呢? ? 最简单的方法,查查圣旨吧。圣旨?对,苹果的官方文档就是金科玉律和圣旨。一切你不能肯定的 事情最好的方式就是通过苹果官方文档来确定。 ? 关于willSelectRowAtIndexPath,方法圣旨中关于iOS的文档是这么宣布

14、的: “奉天承运皇帝诏曰: ? Return Value: An index-path object that confi rms or alters the selected row. Return an NSIndexPath object other than indexPath if you want another cell to be selected. Return nil if you dont want the row selected. ? 钦此。” ? 圣旨中说的清清楚楚明明白白真真切切: ? 1.我们可以返回和参数相同的index-path,这就意味着该行可以被选中。

15、? 2.我们可以返回另一个index-path,假如我们希望选中另一行。 ? 3.我们可以返回nil,从而避免该行被选中。 ? 而关于cellForRowAtIndexPath方法,圣旨中是这么宣布的: ? “奉天承运皇帝诏曰: Return Value: An object inheriting from UITableViewCell that the table view can use for the specifi ed row. An assertion is raised if you return nil. ? 钦此” ? 上面说的很明白了,该方法必须返回一个恰当的table view cell对象。否则,An assertion is raised if you return nil. 如果你返回了nil,而不是一个有效的UITableViewCell对象,那么应用就会崩溃。因 为你公然抗命,领旨不尊。 assertion是一种特殊的debug工具,用来检查确保你的代码中不会出现非法行为。如果出现了,应 用就会崩溃,同时Xcode会帮忙提供一些错误信息。 关于bug和debug后面我们会逐渐感受到,现在先别害怕。Dont panic. ? ? 除了返回对象和基本数据类型的方法,我们还碰到过另外一些不返

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号