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。