第八章 表格單元格選取以及UIAlertController(一)

IOS 8編程入門--使用swift語言 專題目錄:

IOS 8 開發(fā)入門--序言(一)

IOS 8 開發(fā)入門--序言(二)

第一章:創(chuàng)建你的第一個App(一)

第一章:創(chuàng)建你的第一個App(二)

第二章:使用Storyboard設計用戶界面(一)

第二章:使用Storyboard設計用戶界面(二)

第三章 Hello World App 淺述(二)

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

第七章? 使用prototype Cell定制Table View(一)

第七章? 使用prototype Cell定制Table View(二)

全書完整目錄

直到現(xiàn)在冀自,我們一直專注于在表格中顯示數(shù)據(jù)。我猜測你已經在想我們如何在有人點擊單元格時檢測到選擇的行煤伟。這就是我們這一張需要討論的內容。

我們將會繼續(xù)美化我們在前面章節(jié)創(chuàng)建的FoodPin app吭练,并且為它增加一系列增強功能:

1众辨、當有人點擊單元格時顯示菜單。這個菜單提供兩個選項:call 和 I’ve been here狂票。

2、當用戶選擇“I’ve been here”時顯示心形圖標蚊锹。

理解UITableViewDelegate

當我們在第5章創(chuàng)建Simple Table View App時寝优,我們在TableView Controller中實現(xiàn)了兩個帶個代理包括UITableViewDelegat和UITableViewDataSource。你可以回到第6章溫習一下相關知識枫耳。我們已經討論過UITableViewDataSource協(xié)議,但是UITableViewDelegate協(xié)議僅僅略微提了一下孟抗。

正如在前面提到的迁杨,在iOS編程中代理模式使用的非常普遍。每一個代理負責一個特殊的角色或者任務凄硼,讓系統(tǒng)更加簡單干凈铅协。一個 對象什么時候去做某件確定的任務,取決于另一個對象什么時候通知它摊沉。這就是軟件設計中常見的“分離概念”.

UITableView類就應用了這個設計概念狐史。這兩個協(xié)議設計用于不同的目的。UITableViewDataSource定義了用來管理表格數(shù)據(jù)的方法说墨。表格依賴這個協(xié)議提供表格數(shù)據(jù)骏全。另一方面,UITableViewDelegate協(xié)議處理UITableView的表頭和表腳尼斧,還有姜贡,處理表格行選中和單元格重排序。

實現(xiàn)管理行選中動作的方法是代理的責任棺棵。我們將會實現(xiàn)一些處理行選中的方法楼咳。處理表格行選中。在實現(xiàn)相關方法之前烛恤,你可能奇怪:我們如何才能知道UITableViewDelegate協(xié)議中要實現(xiàn)哪些方法母怜?

答案是,閱讀參考手冊缚柏。你可以免費方法Apple的官方iOS開發(fā)者參考手冊苹熏。作為一個iOS開發(fā)者,你需要經常閱讀API文檔船惨。世界上沒有一本書可以包含iOS SDK所有的東西柜裸。大多數(shù)時間,特別是SDK有改變的時候粱锐,你需要參考API文檔疙挺。Apple 在Xcode中提供一種簡單的方法訪問參考文檔。你只需要將光標放在類或者協(xié)議上(例如UITableView Controller)并且按下“control-command-怜浅?”铐然。接下來將會彈出類的相關細節(jié)例如類實現(xiàn)了哪些協(xié)議蔬崩。點擊UITableViewDelegate將會打開一個文檔瀏覽器。從該瀏覽器中你可以找到協(xié)議定義的所有方法搀暑。

瀏覽文檔過后沥阳,你將會在這些方法中發(fā)現(xiàn)用于管理行選中的方法:

tableView(_:willSelectRowAtIndexPath:)

tableView(_:didSelectRowAtIndexPath:)

這兩個方法都是設計用于處理行選中的。唯一的不同是tableView(_:willSelectRowAtIndexPath:)當某行將要被選中時被調用自点。你能用該方法阻止某個單元格被選中桐罕。通常時候,你可以用tableView(_:didSelectRowIndexPath:)處理某行被選中桂敛,該方法在某行被選中時調用功炮。這個方法就是我們用來實現(xiàn)某行被選中時的行為(如彈出菜單)所用的方法。用代碼管理行選中术唬。好了薪伏,解釋的夠多了。讓我們將注意力轉移到有趣的部分并且寫一些代碼粗仓。

在Xcode中嫁怀,打開RestaurantTableViewController.swift文件并且在RestaurantTableViewController類中插入下面的代碼:

上面的代碼使用UIAlertController類創(chuàng)建一個選擇菜單。當某一行被選中時借浊,我們彈出一個action sheet顯示“What do you want to do”消息還有一個取消按鈕塘淑。試著運行一下App。現(xiàn)在App能夠檢測到觸按了蚂斤。

更多關于UIAlertController

在我們繼續(xù)之前朴爬,我們多介紹一下UIAlertController類。我們在上面已經使用了UIAlertController但是我們還沒深入介紹它橡淆。UIAlertController類在iOS 8中推出用于取代老的iOS SDK版本中的UIAlertView和UIActionSheet召噩。UIAlertController類設計顯示警告信息給用戶。

參看前面的代碼片段逸爵,我們可以通過使用preferredStyle參數(shù)說明UIAlertController的樣式具滴。你可以設置參數(shù)的值為“.ActionSheet”或者”.Alert”.圖 顯示了示例的警告樣式。

在給用戶顯示一條消息以外师倔,你可以將alert controller和動作關聯(lián)起來為用戶提供一條反饋的渠道构韵。為實現(xiàn)該功能,創(chuàng)建一個UIAlertAction對象趋艘,設置你喜歡的標題疲恢,樣式,并完成執(zhí)行該動作的代碼瓷胧。在代碼片段中显拳,我們采用“Cancel”標題和”.Cancel”樣式創(chuàng)建一個取消動作 。當用戶選擇取消動作時不會執(zhí)行任何操作搓萧。因此處理函數(shù)(handler)需要設置為nil杂数。在UIAlertAction對象創(chuàng)建后宛畦,你可以使用alert controller的addAction方法將UIAlertAction添加進來。

當alert controller被正確配置好之后揍移,你可以通過PressentViewController 方法顯示出來次和。

這就是如何使用UIAlertController類。作為一個初學者那伐,你可能有一大堆疑問:

1踏施、當我們使用preferredStyle參數(shù)創(chuàng)建UIAlertController時,我們怎么知道preferredStyle參數(shù)有哪些可選值罕邀?

2读规、點號語法是我沒見過的,難道不應該寫成UIAlertControllerStyle.AtionSheet?

恩燃少,兩個不錯的問題。

對于第一個問題铃在,答案還是”閱讀參考手冊”阵具。在Xcode 中你可以將光標放置到preferredStyle參數(shù)上并且按下control-command-?。Xcode將會顯示這個方法的聲明定铜,你可以點擊UIAlertController Style進一步閱讀API參考手冊阳液。正如你從 下圖看到的,UIAlertControllerStyle實際上是一個枚舉類型揣炕,它定義了兩個值:ActionSheet和Alert帘皿。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市畸陡,隨后出現(xiàn)的幾起案子鹰溜,更是在濱河造成了極大的恐慌,老刑警劉巖丁恭,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曹动,死亡現(xiàn)場離奇詭異,居然都是意外死亡牲览,警方通過查閱死者的電腦和手機墓陈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來第献,“玉大人贡必,你說我怎么就攤上這事∮购粒” “怎么了仔拟?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長飒赃。 經常有香客問我理逊,道長橡伞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任晋被,我火速辦了婚禮兑徘,結果婚禮上,老公的妹妹穿的比我還像新娘羡洛。我一直安慰自己挂脑,他們只是感情好,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布欲侮。 她就那樣靜靜地躺著崭闲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪威蕉。 梳的紋絲不亂的頭發(fā)上刁俭,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音韧涨,去河邊找鬼牍戚。 笑死,一個胖子當著我的面吹牛虑粥,可吹牛的內容都是我干的如孝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼娩贷,長吁一口氣:“原來是場噩夢啊……” “哼第晰!你這毒婦竟也來了?” 一聲冷哼從身側響起彬祖,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茁瘦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后储笑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腹躁,經...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年南蓬,在試婚紗的時候發(fā)現(xiàn)自己被綠了纺非。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡赘方,死狀恐怖烧颖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情窄陡,我是刑警寧澤炕淮,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站跳夭,受9級特大地震影響涂圆,放射性物質發(fā)生泄漏们镜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一润歉、第九天 我趴在偏房一處隱蔽的房頂上張望模狭。 院中可真熱鬧,春花似錦踩衩、人聲如沸嚼鹉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锚赤。三九已至,卻和暖如春褐鸥,著一層夾襖步出監(jiān)牢的瞬間线脚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工叫榕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浑侥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓翠霍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蠢莺。 傳聞我的和親對象是個殘疾皇子寒匙,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內容