第八章 表格單元格選取以及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閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容