IOS 8编程入门--使用swift语言 专题目录:
...............
第七章 使用prototype Cell定制Table View(一)
第七章 使用prototype Cell定制Table View(二)
直到现在,我们一直专注于在表格中显示数据。我猜测你已经在想我们如何在有人点击单元格时检测到选择的行。这就是我们这一张需要讨论的内容。
我们将会继续美化我们在前面章节创建的FoodPin app,并且为它增加一系列增强功能:
1、当有人点击单元格时显示菜单。这个菜单提供两个选项:call 和 I’ve been here。
2、当用户选择“I’ve been here”时显示心形图标。
理解UITableViewDelegate
当我们在第5章创建Simple Table View App时,我们在TableView Controller中实现了两个带个代理包括UITableViewDelegat和UITableViewDataSource。你可以回到第6章温习一下相关知识。我们已经讨论过UITableViewDataSource协议,但是UITableViewDelegate协议仅仅略微提了一下。
正如在前面提到的,在iOS编程中代理模式使用的非常普遍。每一个代理负责一个特殊的角色或者任务,让系统更加简单干净。一个 对象什么时候去做某件确定的任务,取决于另一个对象什么时候通知它。这就是软件设计中常见的“分离概念”.
UITableView类就应用了这个设计概念。这两个协议设计用于不同的目的。UITableViewDataSource定义了用来管理表格数据的方法。表格依赖这个协议提供表格数据。另一方面,UITableViewDelegate协议处理UITableView的表头和表脚,还有,处理表格行选中和单元格重排序。
实现管理行选中动作的方法是代理的责任。我们将会实现一些处理行选中的方法。处理表格行选中。在实现相关方法之前,你可能奇怪:我们如何才能知道UITableViewDelegate协议中要实现哪些方法?
答案是,阅读参考手册。你可以免费方法Apple的官方iOS开发者参考手册。作为一个iOS开发者,你需要经常阅读API文档。世界上没有一本书可以包含iOS SDK所有的东西。大多数时间,特别是SDK有改变的时候,你需要参考API文档。Apple 在Xcode中提供一种简单的方法访问参考文档。你只需要将光标放在类或者协议上(例如UITableView Controller)并且按下“control-command-?”。接下来将会弹出类的相关细节例如类实现了哪些协议。点击UITableViewDelegate将会打开一个文档浏览器。从该浏览器中你可以找到协议定义的所有方法。
浏览文档过后,你将会在这些方法中发现用于管理行选中的方法:
tableView(_:willSelectRowAtIndexPath:)
tableView(_:didSelectRowAtIndexPath:)
这两个方法都是设计用于处理行选中的。唯一的不同是tableView(_:willSelectRowAtIndexPath:)当某行将要被选中时被调用。你能用该方法阻止某个单元格被选中。通常时候,你可以用tableView(_:didSelectRowIndexPath:)处理某行被选中,该方法在某行被选中时调用。这个方法就是我们用来实现某行被选中时的行为(如弹出菜单)所用的方法。用代码管理行选中。好了,解释的够多了。让我们将注意力转移到有趣的部分并且写一些代码。
在Xcode中,打开RestaurantTableViewController.swift文件并且在RestaurantTableViewController类中插入下面的代码:
上面的代码使用UIAlertController类创建一个选择菜单。当某一行被选中时,我们弹出一个action sheet显示“What do you want to do”消息还有一个取消按钮。试着运行一下App。现在App能够检测到触按了。
更多关于UIAlertController
在我们继续之前,我们多介绍一下UIAlertController类。我们在上面已经使用了UIAlertController但是我们还没深入介绍它。UIAlertController类在iOS 8中推出用于取代老的iOS SDK版本中的UIAlertView和UIActionSheet。UIAlertController类设计显示警告信息给用户。
参看前面的代码片段,我们可以通过使用preferredStyle参数说明UIAlertController的样式。你可以设置参数的值为“.ActionSheet”或者”.Alert”.图 显示了示例的警告样式。
在给用户显示一条消息以外,你可以将alert controller和动作关联起来为用户提供一条反馈的渠道。为实现该功能,创建一个UIAlertAction对象,设置你喜欢的标题,样式,并完成执行该动作的代码。在代码片段中,我们采用“Cancel”标题和”.Cancel”样式创建一个取消动作 。当用户选择取消动作时不会执行任何操作。因此处理函数(handler)需要设置为nil。在UIAlertAction对象创建后,你可以使用alert controller的addAction方法将UIAlertAction添加进来。
当alert controller被正确配置好之后,你可以通过PressentViewController 方法显示出来。
这就是如何使用UIAlertController类。作为一个初学者,你可能有一大堆疑问:
1、当我们使用preferredStyle参数创建UIAlertController时,我们怎么知道preferredStyle参数有哪些可选值?
2、点号语法是我没见过的,难道不应该写成UIAlertControllerStyle.AtionSheet?
恩,两个不错的问题。
对于第一个问题,答案还是”阅读参考手册”。在Xcode 中你可以将光标放置到preferredStyle参数上并且按下control-command-?。Xcode将会显示这个方法的声明,你可以点击UIAlertController Style进一步阅读API参考手册。正如你从 下图看到的,UIAlertControllerStyle实际上是一个枚举类型,它定义了两个值:ActionSheet和Alert。