A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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』很開心的繼續按下去~







评分

参与人数 2技术分 +3 黑马币 +10 收起 理由
lucky0512 + 10 赞一个!
黑妞 + 3 赞一个!

查看全部评分

38 个回复

倒序浏览
本帖最后由 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所以只講解最實用的部分。

        感謝看官老爺們的收看,歡迎大家動手做做看,讓我們用一行一行的代碼,一步一步實現我們的夢想,我是阿達,我們下回見。


回复 使用道具 举报
本次項目檔案:http://pan.baidu.com/s/1mgmq2Cg

喜歡的小夥伴們記得給好評喔 麼嚜搭
回复 使用道具 举报
赞一个, 恭喜第二篇出炉, lz真是大神级别的,请多多指教
回复 使用道具 举报
离经叛道的女子 发表于 2015-6-20 15:49
赞一个, 恭喜第二篇出炉, lz真是大神级别的,请多多指教

lz是什麼啊? 哪邊有神我去拜 XD
回复 使用道具 举报
不能用简体字吗?看的太费劲了
回复 使用道具 举报
同意楼上说法!
回复 使用道具 举报
赞赞赞,必须赞
回复 使用道具 举报
大神。。。膜拜中
回复 使用道具 举报
求简体字
回复 使用道具 举报
繁体字好砸眼啊
回复 使用道具 举报
能不能用简体字啊,繁体字看着有点晕啊。。
回复 使用道具 举报
是不是有点
回复 使用道具 举报
这个真心看不太懂啊!
回复 使用道具 举报
加油,继续,不要放弃
回复 使用道具 举报
jia you  ba shao nian
回复 使用道具 举报
加油加油!
回复 使用道具 举报
甘巴里!                           
回复 使用道具 举报
我太奢侈了,送了10个黑马币
回复 使用道具 举报
每日一签,繁体字看了半天.....
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马