欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【一步一步學IOS5 】 從UITableView中刪除一行

系統 2699 0

如何從UITableView中刪除一行?

?

在創建Simple Table 應用程序時,經常有人提到上述問題,

?

在開始編碼之前,我先介紹下 Model-View-Controller 模式,這個模式是在用戶界面編程中經常引用的設計模式之一。

?

1.理解 Model-View-Controller

?

不管學習什么語言,成為一個更好的開發人員所需要了解的概念是Separation ?of Concerns (SoC , 關注點分離).

?

這個概念很簡單,關注點是軟件功能的不同方面,這個概念是鼓勵開發人員將一個大的功能或程序分為幾個關注點區域,每個區域都有自己的職責。在iOS編程中經常發現的委托模式(delegate pattern),也是SoC模式的一個例子。

?

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

?

Model - 模型負責保存數據和數據上的操作。模型可以很簡單,如一個數組對象存放所有的表數據。新增、編輯和更新是數據操作方法。實際上,操作方法經常認為是業務邏輯(Businsess Rules).

?

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

?

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

?

2.如何從UITableView 中刪除行數據

?

我們有3項工作要做:

?

1)編寫代碼,切換到編輯模式,實現行刪除

2)從模型中刪除相應的表數據項

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

?

?

1)編寫代碼,切換到編輯模式,實現行刪除

在iOS App中,用戶通過劃過一行,初始化刪除按鈕。回想一下,我們使用了UITableViewDataSource協議,可參考API文檔,其中有一個方法:

?

tableView:commitEditStyle:forRowAtIndexPath.當用戶劃過一行時,表視圖將檢查該方法釋放實現。如果發現該方法,表視圖將自動顯示刪除按鈕。

?

即便該方法是空的,并沒有執行任何操作,當你劃過一行時,仍然可以看到刪除按鈕。


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

2)從模型中刪除相應的表數據項

?

接下來的工作是添加代碼到該方法中,刪除實際的表數據。和其它表視圖方法一樣,它傳入indexPath 參數,告訴你需要刪除的行號(row number),因此,你可以使用這一信息,從表數組中刪除對應的元素。

?

在Simple Table 應用程序中,我們使用NSArray 數組來存放表數據(也就是模型)。問題是NSArray 是不可編輯的,也就是在數組初始化之后,你無法添加、刪除其內容。可選辦法是,我們將使用NSMutableArray 代替 NSArray,

?

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

?

@implementation SimpleTableViewController

{

NSMutableArray *tableData;

}

?

在tableView:commitEditStyle方法中,添加如下代碼,從數據中刪除實際的數據。代碼如下:

?

?

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

{

? ? //Remove the row from data model

? ? [ tableData removeObjectAtIndex :indexPath. row ];

?

}

?

NSMutableArray 提供了一些方法用來操作數組的內容。這里,我們使用removeObjectAtIndex 方法從數組中刪除特定項,并刪除一行。悲催,App并沒有按預期工作。

?

這并不是bug。App確實從數組中刪除了該數據項。已刪除的數據項仍然出現在視圖中的原因是視圖沒有刷新,無法反應出數據模型的更新。

?

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

?

因此,一旦底層的數據刪除了,我們需要調用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.測試你的App并刪除一行記錄

再次運行App,并劃過表視圖行記錄,刪除一行,現在你應該能夠刪除指定數據項了。

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


?

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本在线播放不卡一区二区三区 | aaa欧美| 美女扒开胸罩给男生看视频 | 成年人黄网站 | 黄色在线免费看 | 青娱乐综合网 | 日韩手机视频 | 亚洲欧美第一页 | 日韩少妇成熟A片无码专区 黄在线免费观看 | 亚洲九九 | 丝袜捆绑调教视频免费区 | 一区二区三区网站在线免费线观看 | 日韩精品一区二区三区国语自制 | 午夜在线观看视频 | 免费一级毛片不卡在线播放 | 国产日韩欧美 | 国产精品日本欧美一区二区 | 超碰在线影院 | 一区二区中文字幕 | 日本道专区无码中文字幕 | 成人天堂资源www在线 | 欧美高清一级片 | 开心网五月色婷婷综合图片 | 国产午夜一区二区在线观看 | 成年做羞羞免费观看视频网站 | 久久艹免费视频 | 国产欧美精品午夜在线播放 | 久久久久国产精品免费免费搜索 | 欧美久久久久久 | 亚洲乱码AV久久久久久久 | 久碰人澡人澡人澡人澡91 | 添人人躁日日躁夜夜躁夜夜揉 | 在线观看欧美三级 | 九色视频网址 | 一区不卡 | 亚洲色片网站 | 亚洲欧美国产另类视频 | 久久国产成人 | 色洛色中文综合网站 | 色婷婷精品综合久久狠狠 | 青娱乐国产精品 |