日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

【一步一步學(xué)IOS5 】 從UITableView中刪除一行

系統(tǒng) 2823 0

如何從UITableView中刪除一行?

?

在創(chuàng)建Simple Table 應(yīng)用程序時(shí),經(jīng)常有人提到上述問(wèn)題,

?

在開(kāi)始編碼之前,我先介紹下 Model-View-Controller 模式,這個(gè)模式是在用戶界面編程中經(jīng)常引用的設(shè)計(jì)模式之一。

?

1.理解 Model-View-Controller

?

不管學(xué)習(xí)什么語(yǔ)言,成為一個(gè)更好的開(kāi)發(fā)人員所需要了解的概念是Separation ?of Concerns (SoC , 關(guān)注點(diǎn)分離).

?

這個(gè)概念很簡(jiǎn)單,關(guān)注點(diǎn)是軟件功能的不同方面,這個(gè)概念是鼓勵(lì)開(kāi)發(fā)人員將一個(gè)大的功能或程序分為幾個(gè)關(guān)注點(diǎn)區(qū)域,每個(gè)區(qū)域都有自己的職責(zé)。在iOS編程中經(jīng)常發(fā)現(xiàn)的委托模式(delegate pattern),也是SoC模式的一個(gè)例子。

?

這里的MVC模式是另一個(gè)SoC的范例。MVC的核心思想是分離用戶界面為3個(gè)區(qū)域,每一個(gè)區(qū)域負(fù)責(zé)特定的功能。如果MVC名字上暗示了一樣,MVC將用戶界面分為3個(gè)部分:

?

Model - 模型負(fù)責(zé)保存數(shù)據(jù)和數(shù)據(jù)上的操作。模型可以很簡(jiǎn)單,如一個(gè)數(shù)組對(duì)象存放所有的表數(shù)據(jù)。新增、編輯和更新是數(shù)據(jù)操作方法。實(shí)際上,操作方法經(jīng)常認(rèn)為是業(yè)務(wù)邏輯(Businsess Rules).

?

View - 視圖管理信息的可視化顯示,例如,UITableView 以表示圖格式顯示信息

?

Controller - 控制器是Model 和 View 之間的橋梁,負(fù)責(zé)轉(zhuǎn)換視圖中用戶交互(如輕拍操作)為執(zhí)行模型中的合適方法。例如,用戶輕拍了視圖中的一個(gè)刪除按鈕,相應(yīng)的,控制器出發(fā)模型中刪除操作方法。隨后,在要求視圖更新自己,并反應(yīng)出數(shù)據(jù)模型的更新。

?

2.如何從UITableView 中刪除行數(shù)據(jù)

?

我們有3項(xiàng)工作要做:

?

1)編寫代碼,切換到編輯模式,實(shí)現(xiàn)行刪除

2)從模型中刪除相應(yīng)的表數(shù)據(jù)項(xiàng)

3)再次加載表視圖,以便反映出表數(shù)據(jù)的變化

?

?

1)編寫代碼,切換到編輯模式,實(shí)現(xiàn)行刪除

在iOS App中,用戶通過(guò)劃過(guò)一行,初始化刪除按鈕?;叵胍幌?,我們使用了UITableViewDataSource協(xié)議,可參考API文檔,其中有一個(gè)方法:

?

tableView:commitEditStyle:forRowAtIndexPath.當(dāng)用戶劃過(guò)一行時(shí),表視圖將檢查該方法釋放實(shí)現(xiàn)。如果發(fā)現(xiàn)該方法,表視圖將自動(dòng)顯示刪除按鈕。

?

即便該方法是空的,并沒(méi)有執(zhí)行任何操作,當(dāng)你劃過(guò)一行時(shí),仍然可以看到刪除按鈕。


【一步一步學(xué)IOS5 】 從UITableView中刪除一行和Model-View-Controller

2)從模型中刪除相應(yīng)的表數(shù)據(jù)項(xiàng)

?

接下來(lái)的工作是添加代碼到該方法中,刪除實(shí)際的表數(shù)據(jù)。和其它表視圖方法一樣,它傳入indexPath 參數(shù),告訴你需要?jiǎng)h除的行號(hào)(row number),因此,你可以使用這一信息,從表數(shù)組中刪除對(duì)應(yīng)的元素。

?

在Simple Table 應(yīng)用程序中,我們使用NSArray 數(shù)組來(lái)存放表數(shù)據(jù)(也就是模型)。問(wèn)題是NSArray 是不可編輯的,也就是在數(shù)組初始化之后,你無(wú)法添加、刪除其內(nèi)容??蛇x辦法是,我們將使用NSMutableArray 代替 NSArray,

?

NSMutableArray 提供了新增和刪除操作方法:

?

@implementation SimpleTableViewController

{

NSMutableArray *tableData;

}

?

在tableView:commitEditStyle方法中,添加如下代碼,從數(shù)據(jù)中刪除實(shí)際的數(shù)據(jù)。代碼如下:

?

?

- ( void )tableView:( UITableView *)tableView commitEditingStyle:( UITableViewCellEditingStyle )editingStyle forRowAtIndexPath:( NSIndexPath *)indexPath

{

? ? //Remove the row from data model

? ? [ tableData removeObjectAtIndex :indexPath. row ];

?

}

?

NSMutableArray 提供了一些方法用來(lái)操作數(shù)組的內(nèi)容。這里,我們使用removeObjectAtIndex 方法從數(shù)組中刪除特定項(xiàng),并刪除一行。悲催,App并沒(méi)有按預(yù)期工作。

?

這并不是bug。App確實(shí)從數(shù)組中刪除了該數(shù)據(jù)項(xiàng)。已刪除的數(shù)據(jù)項(xiàng)仍然出現(xiàn)在視圖中的原因是視圖沒(méi)有刷新,無(wú)法反應(yīng)出數(shù)據(jù)模型的更新。

?

3)再次加載表視圖,以便反映出表數(shù)據(jù)的變化

?

因此,一旦底層的數(shù)據(jù)刪除了,我們需要調(diào)用reloadData方法,要求表視圖刷新,如下是更新之后的代碼:

?

- ( void )tableView:( UITableView *)tableView commitEditingStyle:( UITableViewCellEditingStyle )editingStyle forRowAtIndexPath:( NSIndexPath *)indexPath

{

? ? //Remove the row from data model

? ? [ tableData removeObjectAtIndex :indexPath. row ];

?

? ? //Request table view to reload

? ? [tableView reloadData ];

?

}



3.測(cè)試你的App并刪除一行記錄

再次運(yùn)行App,并劃過(guò)表視圖行記錄,刪除一行,現(xiàn)在你應(yīng)該能夠刪除指定數(shù)據(jù)項(xiàng)了。

【一步一步學(xué)IOS5 】 從UITableView中刪除一行和Model-View-Controller
?


?

【一步一步學(xué)IOS5 】 從UITableView中刪除一行和Model-View-Controller


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!??!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 溧阳市| 秦安县| 保德县| 留坝县| 琼结县| 循化| 永福县| 卓尼县| 桦川县| 稷山县| 鸡东县| 永安市| 临湘市| 涡阳县| 镇赉县| 论坛| 石屏县| 渑池县| 温州市| 沽源县| 双桥区| 文安县| 海阳市| 方正县| 汝城县| 馆陶县| 亳州市| 红安县| 英吉沙县| 三穗县| 临沭县| 安陆市| 平乐县| 车致| 呈贡县| 雅安市| 阿瓦提县| 同德县| 建宁县| 军事| 青田县|