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

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。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容