IOS 8編程入門--使用swift語言 專題目錄:
...............
第七章? 使用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帘皿。