iOS移动开发社区移动开发程序员

第八章 表格单元格选取以及UIAlertController(一

2017-07-25  本文已影响50人  奋斗的小林

IOS 8编程入门--使用swift语言 专题目录:

IOS 8 开发入门--序言(一)

IOS 8 开发入门--序言(二)

第一章:创建你的第一个App(一)

第一章:创建你的第一个App(二)

第二章:使用Storyboard设计用户界面(一)

第二章:使用Storyboard设计用户界面(二)

第三章 Hello World App 浅述(二)

...............

第七章  使用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。

上一篇下一篇

猜你喜欢

热点阅读