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

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

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

1、从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter15 ? 版权声明: 原文及示例代码来自raywenderlich store中的iOS Apprentice 系列2教程,经过翻译和改编。 版权归原作者所有,本系列教程仅供学习参考使用,感兴趣的朋友建议购买原教程(http:/ ? 欢迎继续我们的学习。 ? 开发环境: Xcode 5.1 DP 2 +iOS 7.1 beta2 ? 在之前的内容中,其实我们已经算是完成了一个简单的小to-do list应用。我们可以添加、编辑和删 除待办事项,并保存在沙盒文件中。 而从这一章开始,我们将学习如何创建多个代办事务清单。这也是为什

2、么这个应用的名称是 Checklists而不是Checklist。 ? 为了实现这一功能,我们需要按以下步骤来完成: ? 1.创建一个新的界面,用于显示所有的代办事务清单 2.创建一个新的界面,可以让用户添加/编辑代办事务清单 3.当触碰代办事务清单列表中的某一项时,会显示该清单所属的所有代办事项 4.将所有的代办事务清单保存在文件中,然后在需要的时候从该文件中加载。 ? 这里我们需要两个新的界面,也就是说需要两个新的视图控制器:用于显示用户代办事务清单列表 的AllListsViewController,以及可以让用户添加和编辑待办事项清单列表的 ListDetailViewControll

3、er ? 当前应用的首界面是ChecklistsViewController。该文件是Xcode作为Single View Application 模板 的一部分创建的,其名称则是根据我们新建项目时所选的Class Prefi x命名的。 不过考虑到我们即将做出的调整,这里的Checklists显然有点不合时宜了。因为它用来显示一个单一 的待办事项清单。 ? 因此,首先我们将重新命名ChecklistsViewController为ChecklistViewController。 ? 还记得怎么做吗?在Xcode中切换到ChecklistsViewController.h,光标放到interf

4、ace这一行语句 的ChecklistsViewController上,然后使用菜单中的Refactor工具来更名。 ? 更名后记得clean一下,然后再编译运行一下,看看一切是否正常。 ? 如果没有问题,那么就可以继续下面的工作了。 ? ? 显示所有代办事项清单的列表界面 ? 首先我们要添加一个AllListsViewController视图控制器,而且这个界面将成为该应用的首界面。 ? 当我们完成后该界面显示如下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 当然,这个界面的显示内容和之前的界面类似。它是一个用于显示Che

5、cklist对象(而非 ChecklistItem对象)的表视图控制器。 从现在起,我们用AllLists来代指这个界面,用Checklist代指显示单一代办事务清单的界面。 ? 在Xcode左侧的项目导航部分,右键单击Checklists群组,选择New File,在Cocoa Touch部分选择 Objective-C class模板。点击Next,然后将新文件命名为AllListsViewController,将其设置为 subclass of UITableViewController,其它部分仍然不勾选。 ? 在我们可以顺利编译运行之前,需要对模板默认创建的文件做一些调整工作。首先我

6、们需要在表视 图中放入一些伪数据,从而让它可以顺利跑起来。 我一向的习惯是,每做一次小的更新就编译运行一下,看看一切是否顺利。 如果一切正常,我们就可以继续下一步的工作了。 ? 在Xcode中切换到AllListsViewController.m,删除numberOfSectionsInTableView方法。 ? 更改numberOfRowsInSection方法如下: ? - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section / Return the number o

7、f rows in the section. return 3; ? ? 更改cellForRowAtIndexPath方法如下: ? - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath static NSString *CellIdentifi er = “Cell“; UITableViewCell *cell = tableView dequeueReusableCellWithIdentifi er:CellIdentifi er;

8、/ Confi gure the cell. if(cell = nil) cell = UITableViewCell allocinitWithStyle:UITableViewCellStyleDefault reuseIdentifi er:CellIdentifi er; cell.textLabel.text = NSString stringWithFormat:“清单: %ld“,(long)indexPath.row; return cell; 以上方法的内容和模板默认的代码很相似,区别在于我们在cell中放入了一些文本。 最后一步当然就是在storyboard中添加新的视图

9、控制器 在Xcode中切换到storyboard,然后从右下方的Objects Library中拖出一条Table View Controller到 画布上。 按住ctrl键,从最左侧的导航控制器拖出一条线到这个新的table view controller,从弹出菜单中选择 Relationship Segue- root view。 这样一来,之前在导航控制器和Checklist View Controller之前的关联就消失了。此时Checklist不再 是应用的首界面。 选中这个新的表视图控制器,在Xcode右侧面板中切换到identity inspector,然后将Class属性更改

10、 为AllListsViewController。 ? 双击该表视图控制器的导航栏,将标题更改为Checklists 为了让画布井井有条,最好手动调整下画布上的视图控制器的元素,让新的表视图控制器处于其他 界面之间。 ? 为了让我们对表视图有更深入的了解,这里暂时不会用prototype cell。当然如果你自己想试试看也 没关系,作为练习你甚至可以重写这部分的代码。 ? 从All Lists View Controller中删除空白的prototype cell 按住Ctrl键,从All Lists View Controller底部的icon拖出一条线到右侧的Checklist View

11、Controller, 选择push ? 这样我们就从All Lists界面添加了一个到Checklist界面的push切换。注意这个新的segue没有附着到 任何一个按钮或table view cell上面。我们不能直接使用界面元素的交互来触发这个segue。这就意 味着后面需要用纯手写代码的方式来实现。 ? 点击这个新的segue,在Xcode右侧面板中切换到Attributes inspector,然后将identifi er属性更改 为ShowChecklist。 ? 这里我们选择的的Style是Push,因为当执行该segue的时候,我们会将Checklist View Contro

12、ller push到导航堆栈上。 ? 切换到AllListsViewController.m,添加一个didSelectRowAtIndexPath方法: ? -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath ? self performSegueWithIdentifi er:“ShowChecklist“ sender:nil; ? ? 记住当用户触碰表视图中的某一行时就会触发这个代理方法。之前,触碰某一行会自动执行segue, 因为我们将segue和prot

13、otype cell关联在一起。但这里我们不使用prototype cell,因此需要手写代 码来执行segue。当然你也看到了,没有想象中那么难,只需要调用一个 performSegueWithIdentifi er方法就足以实现了。 ? 编译运行应用,效果是类似下面的: ? 当我们触碰某一行的时候,会看到熟悉的ChecklistViewController界面出现在眼前。我摸可以触碰 左上角的Checklists按钮返回首界面。这就是导航控制器的真正威力所在! ? 注意,如果你的应用没有顺利进行,那么可以用FileMerge工具来对比下代码。很可能出错的一点是 : 在AllListsVie

14、wController.m中,cellForRowAtIndexPath方法中重用cell的一行代码是: ? UITableViewCell *cell = tableView dequeueReusableCellWithIdentifi er:CellIdentifi er; ? 而不是: ? UITableViewCell *cell = tableView dequeueReusableCellWithIdentifi er:CellIdentifi er forIndexPath:indexPath; ? ? 之所以容易出现上面的错误,是因为Xcode的自动完成功能有时候会让你选择错

15、误的方法而不自 知! ? 接下来我们需要将Checklist View Controller的功能复制到新的All Lists界面中。我们将在顶部添加 一个+按钮,让用户可以创建新的checklist,让用户可以用swipe-to-delte的方式删除checklist,让 用户可以用细节显示按钮来编辑checklist的名称。当然,我们还需要将Checklis 对数组保存到 Checklists.plist文件中。 因为这些工作和之前大同小异,所以接下来的工作会稍微轻松点,主要是复习之前的内容 ? 首先当然还是创建一个代表checklist的数据模型。 ? 在Xcode中基于Objective-C class模板创建一个新的文件,设置subclass of NSObject,然后将其命 名为Checklist。 ? 更改Checklist.h的代码如下: ? #import ? interface Checklist : NSObject ? property(nonatomic,copy)NSString *name; ? end ? 这里我们为Checklist对象添加了一个名为name的字符串属性。 ? 接下来我们将为AllListsViewController添加一个数组,从而可

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

最新文档


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

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