黑马程序员技术交流社区
标题: swift实作app 交流分項二(刪除表格攔位)——阿達經典..... [打印本页]
作者: Kuhoku 时间: 2015-6-20 15:11
标题: swift实作app 交流分項二(刪除表格攔位)——阿達經典.....
本帖最后由 Kuhoku 于 2015-6-20 15:49 编辑
一行代碼一場夢,大家好我是阿達。上一次發帖經驗讓阿達深深的認識了許多的版規還有運作方式。所以以後的發文會考慮篇幅,字數。盡量只講關鍵技術,其實這是一個很糾結的問題,因為我希望帶給大家的是一個圖文並茂的解說,而不是單純的複製貼上程式碼。所以又花了一點時間把原本的流程重新規劃了一下。往後的帖子(包括這篇),阿達會盡量以一個觀念為主來解釋,而不是以一個元件的使用來解釋。希望各位觀眾老爺們會喜歡。
另外關於字體的問題,阿達深知入境隨俗的重要,原本的規劃是打算進ios第十期(八月十七號),拼第二期招生(七月十號) 因為時間充裕的關係就慢工出細活的慢慢寫。結果前幾天得知開班時間整整提早了兩個星期!(八月二號開課,六月二十六號)結果變成說每一篇都要趕工生產,剩下三天的時間要寫完十篇技術文,還要再用剩下三天來完成筆試面試...我都覺得我簡直高產似母豬啊…(遠望)。如此一來也就沒又辦法再顧慮字體的問題了~在這裡跟觀眾老爺們道歉。
今天我們要談的是關於表格列,自訂動作,以及MVC。在這篇當中呢,將為之前的項目中加入刪除列表的功能,還有導覽控制器,會讓一個單純的表格瞬間感覺不同唷!
在開始之前我想先介紹一下MVC,也就是Model,View,Controller,是使用這介面程式設計中最常被引用的設計模式。MVC並不是iOS的專利,如果曾經學過JAVA或是RUBY的話對他應該也不陌生,這是一個強大的設計模式,用於各種軟體的應用。
無論各位小夥伴們學習的是什麼語言,讓你成為優秀的程式設計師的一個重要觀念就是『關注點分離』 Separation of Concern 簡稱 SoC。這個觀念其實很簡單,關注點(Concern)就是有關軟體功能的差異性。這個觀念是鼓勵開發者將一個大的功能或是程式,分散成數個領域,每個領域都有自己所負責的責任。
而MVC也是SoC另外的例子,MVC背後的核心概念就是明確的將使用者介面分成三個區塊,每一個區塊負責相對應的功能。
模組(Model):負責保存資料或者操作。
視圖(View):管理資訊的視覺呈現。
控制器(Concern):控制器是連接模組跟視圖之間的橋樑。他將使用者在視圖上面的互動(例如點擊)轉譯成在模組中要執行的動作。
舉例來說,當使用者在視圖上面點擊了『刪除』之後,接下來的控制器就會觸發模型中的刪除動作,然後他會要求刷新視圖來反應資料的更新。(也就是把資料刪除)
說了那麼多,大家還是來實作吧,接續我們上一篇所做的項目,如果是第一次看到阿達發帖的小夥伴,可以到這個地方下載到上一篇的項目檔案。不過還是建議看過上一篇之後整個觀念會比較連貫喔。
項目載點:http://pan.baidu.com/s/1dDwEfVN
今天我們要將它加上『刪除』的功能,倘若是已經完全了解MVC架構的話,應該對如何執行刪除列會有點概念了,這裏有三件事情你必須去做:
1.撰寫程式碼將它切換成編輯模式,以便刪除
2.從模型中刪除對應的表格資料
3.對應表格資料變更,重新載入視圖
首先在這裡說明一下,在這裡有一個方法叫做tableView(_commitEditingStyle editingStyle:forRowAtIndexPath indexPath:)
你只要時做這個方法就可以了。So Easy~~~~
只要加入以下程式碼:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete{
self.restaurantNames.removeAtIndex(indexPath.row)
self.restaurantTypes.removeAtIndex(indexPath.row)
self.restaurantLocations.removeAtIndex(indexPath.row)
self.restaurantImages.removeAtIndex(indexPath.row)
}
}
接下來就是大家最愛command+R的快樂時間了,小夥伴們會發現說,真的出現了一個『Delete』很開心的繼續按下去~
作者: Kuhoku 时间: 2015-6-20 15:14
本帖最后由 Kuhoku 于 2015-6-20 15:22 编辑
然後!就沒有然後了。。。
別擔心這是正常的,在這裡我們說明一下當你按下去的時候 數據的確被刪除了沒錯,可是畫面沒有重新載入,所以才有這樣的現象發生。
我們來證實一下,我們在加入一行程式碼,把陣列的內容打印出來
println("Total item: \(self.restaurantNames.count)")
for name in restaurantNames{
println(name)
}
加好之後的程式碼長這個樣子,之後小夥伴們再次按下command+R
再次運行一下~
我們就拿第二欄位的『Homie』 來做實驗吧!請小夥伴們看仔細了欄位的順序。之後我們在滑動刪除第二個欄位。當然什麼事情也沒發生,不過真的沒有發生嗎?我們來看看xocde是怎麼跟我們說的:
沒錯根據當事人(Xcode)現身說法,他的確是刪掉了第二欄的『Homie』真的是他幹了,他也真的幹了!但是畫面沒更新是你沒說要更新啊!不是我我的問題啊!
所以小夥伴們一定都知道了,接下來我們要做的就是更新畫面。
請各位小夥伴們加入一下代碼
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
再次快樂的按下command+R 你就會發現你所刪除的表格,他真的消失了~
完成之後的程式碼長這個樣子
這篇的分享呢就到這裡到一個段落,也許有小夥伴會說,表格欄位明明還有很多功能啊! 什麼打勾啊!變色啊!之類的,在這裡阿達要說明一下,的確表格欄位還有很多功能這裏沒有說明,但是考慮到說後面要講的內容裡面跟這裡會有所重疊到。所以就極簡約的講了一個刪除功能。而這個功能也是阿達在實務經驗中最實用的功能。所以阿達認為很多大神會教你很多很酷炫的功能如何去實現,但是在這裡我們是為了讓小夥伴們能夠快速地用swift開發出一個app所以只講解最實用的部分。
感謝看官老爺們的收看,歡迎大家動手做做看,讓我們用一行一行的代碼,一步一步實現我們的夢想,我是阿達,我們下回見。
作者: Kuhoku 时间: 2015-6-20 15:36
本次項目檔案:http://pan.baidu.com/s/1mgmq2Cg
喜歡的小夥伴們記得給好評喔 麼嚜搭
作者: 离经叛道的女子 时间: 2015-6-20 15:49
赞一个, 恭喜第二篇出炉, lz真是大神级别的,请多多指教
作者: Kuhoku 时间: 2015-6-20 15:51
lz是什麼啊? 哪邊有神我去拜 XD
作者: lucky0512 时间: 2015-6-29 16:12
不能用简体字吗?看的太费劲了
作者: 低调小K 时间: 2015-6-29 16:41
同意楼上说法!
作者: 清茶用水煮 时间: 2015-6-29 21:38
赞赞赞,必须赞
作者: 痛并快乐着 时间: 2015-6-29 21:59
大神。。。膜拜中
作者: jin3254576 时间: 2015-6-29 22:21
求简体字
作者: wushenshen5180 时间: 2015-6-30 08:03
繁体字好砸眼啊
作者: lucky0512 时间: 2015-6-30 09:15
能不能用简体字啊,繁体字看着有点晕啊。。
作者: fanxing 时间: 2015-6-30 12:12
是不是有点
作者: qiushuo 时间: 2015-6-30 14:21
这个真心看不太懂啊!
作者: qingger 时间: 2015-6-30 16:28
加油,继续,不要放弃
作者: chaoyueshan 时间: 2015-6-30 17:11
jia you ba shao nian
作者: gmx1120 时间: 2015-6-30 22:29
加油加油!
作者: yyyyyyyyqs 时间: 2015-6-30 23:45
甘巴里!
作者: lucky0512 时间: 2015-7-1 15:50
我太奢侈了,送了10个黑马币
作者: Thomas-王 时间: 2015-7-1 17:48
每日一签,繁体字看了半天.....
作者: Kuhoku 时间: 2015-7-1 17:55
下一篇開始就是簡體字了親
作者: yyyyyyyyqs 时间: 2015-7-1 18:02
oh!no!我不要看繁体字。。。。
作者: Kuhoku 时间: 2015-7-1 18:50
別啊 大家都是一起學習的
作者: Kuhoku 时间: 2015-7-1 18:51
別啊 大家都是一起學習的
作者: Kuhoku 时间: 2015-7-1 18:54
下一篇既有簡體字了 喜歡的話請繼續追喔~麼麼噠
作者: 慕名黑马生 时间: 2015-7-1 18:58
新手签到!!
作者: lucky0512 时间: 2015-7-1 19:04
好的,顶。。。。。
作者: fanxing 时间: 2015-7-1 19:25
签到。。。。。。。。
作者: peng_gavin 时间: 2015-7-1 21:10
签到……
作者: 毛琳东 时间: 2015-7-1 21:30
swift这个课程会开么?
作者: 远远的天空之城 时间: 2015-7-1 21:39
有点高端,看不懂
作者: 4B青年 时间: 2015-7-1 22:07
看惯了简体字,繁体字简直是反人类,不过用繁体字说明的话,大家注意力都会跑到繁体字的说明上吧?反而不怎么认真看代码了
作者: Kuhoku 时间: 2015-7-1 22:14
個人不認同繁體字反人類的論點,畢竟還有很多的人類使用繁體字,代碼大家都會寫,謝謝您寶貴的意見
作者: qiushuo 时间: 2015-7-2 10:54
看不懂啊!!!
作者: 低调小K 时间: 2015-7-2 15:50
加油!!!!!!!!!
作者: 毛琳东 时间: 2015-7-2 17:40
能不能来个大神写个转成现代字的软件啊
作者: Kuhoku 时间: 2015-7-2 22:26
這是現代人使用的字啊親
作者: ios_xiaot 时间: 2015-7-3 06:20
swift的东西自己也得学习
作者: 深蓝的蓝 时间: 2015-7-3 23:25
不懂 不过还是顶一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |