1. 程式人生 > >UITableView的點選刪除或者插入一條Cell

UITableView的點選刪除或者插入一條Cell

    最近在實現UITableView的編輯cell功能時,發現有些淡忘這一塊東西了.所以,姑且寫一篇部落格複習一下這塊的知識吧.本文主要拿刪除cell來講,插入其實一模一樣,就不單獨說了.

   刪除cell,就我目前遇到的來說,主要由兩種,一種是側滑刪除cell,還有一種就是點選刪除cell.側滑刪除,想必大家一定很熟悉,今天我主要說說點選刪除.如下圖:


這樣的點選刪除cell,我第一次看,覺得很簡單,就是傳送一條請求,刪除這條資料,然後重新整理一下UITableView就好了.但是當我這樣寫了,卻發現錯了.

然後我才發現自己想錯了.我們在實現側滑刪除的時候,一般都是在下面這個代理方法中,先刪除資料來源,然後在刪除cell.

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

{

[tableView beginUpdates];

if (editingStyle ==UITableViewCellEditingStyleDelete) {

NSLog(@"刪除");

//第一,刪除資料來源,

        [_arrremoveObject:_arr[indexPath.

row]];

//第二,刪除表格cell

//        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];

            [tableView deleteRowsAtIndexPaths:@[indexPath]withRowAnimation: UITableViewRowAnimationRight];

    }else{

        //第一,插入資料來源

        [_arrinsertObject

:@"張三"atIndex:indexPath.row];

       //第二,插入cell.

        [tableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationLeft];

NSLog(@"新增");

    }

     [tableView endUpdates];

}

我現在要實現的功能其實跟側滑刪除一樣,也不所以我也要做上面的操作,先刪除資料來源,然後再刪除cell.然後我還要做的是傳送請求,後臺刪除,資料庫中的這一條資料,跟我前端上面保持一致.

我想明白了,然後剩下的就是編碼了.下面是部分原始碼

#pragma mark ------- UIAlertViewDelegate

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

MDWGirlInfoViewController *viewController = (MDWGirlInfoViewController *)self.controller;

MDWFocusRequest *request=[[MDWFocusRequestalloc] init];

MDWRequestManager *manager=[MDWRequestManagermanager];

if (buttonIndex ==1) {

NSString * path = [@"/status/"stringByAppendingString:_statusId];

    //第一步,先發送網路請求刪除資料

    [manager sendWithoutResponseRequest:pathmethod:@"DELETE"paras:nilbody:request onSuccess:^(AFHTTPRequestOperation *operartion,id responseObject) {

   //第二步,刪除資料來源

NSMutableArray *mutableArray=[NSMutableArrayarrayWithArray:_modelData];

    [mutableArray removeObjectAtIndex:[indexPathrow]];

_modelData=[NSArrayarrayWithArray:mutableArray];

   //第三步,刪除cell

  [self.tableViewdeleteRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

    } onFailure:^(AFHTTPRequestOperation *operation,NSError *error) {

    }];

    }

}

在UITableView中插入或者刪除指定的行(或者節)使用的是如下幾個API:

  • insertRowsAtIndexPath: withRowAnimation: 在指定位置插入行
  • deleteRowsAtIndexPath: withRowAnimation: 刪除指定行
  • insertSections: withRowAnimation: 在指定位置插入節
  • deleteSections: withRowAnimation: 刪除指定節

好了,按照這樣寫完,就搞定這個功能了,原諒我就不舉例插入cell了.原理跟刪除cell一樣.......



相關推薦

UITableView刪除或者插入Cell

    最近在實現UITableView的編輯cell功能時,發現有些淡忘這一塊東西了.所以,姑且寫一篇部落格複習一下這塊的知識吧.本文主要拿刪除cell來講,插入其實一模一樣,就不單獨說了.    

vim 刪除插入或者多列

    很多時候,當我們需要在檔案刪除多列或者在每行的相同位置插入相同的東西時,下邊的操作就顯得尤其方便、高效,下面讓我們列舉一二。      使用vim開啟檔案 1、刪除一列操作:      Ctrl

Java+MySQL:插入資料並刪除

大致過程:1.向資料庫中插入一條資料,並獲取新增資料的id-currentId2.找到id為 (currentId-1) 的資料,如果存在則將它刪除,如果不存在繼續將id減一,知道能夠刪除一條資料package jdbc; import java.sql.Connectio

iOS webview 按鈕返回上頁面或者返回首頁

- (void)floatBtn:(UIButton *)sender {     NSLog(@"點選");     if ([self.webView canGoBack]) {        

每5秒向數據庫中插入記錄-學習筆記

每5秒向數據庫中插入一條記錄-學習筆記 import java.sql.SQLException; import java.util.Timer; import java.util.TimerTask; import java.util.UUID; import cn.itcast.web.dao.Syste

web每5秒向數據庫中插入記錄-學習筆記

每5秒向數據庫中插入一條記錄-學習筆記SystemListener import java.util.Timer; import java.util.TimerTask; import java.util.UUID; import javax.servlet.ServletContextEvent; imp

Shell 指令碼,每隔100行插入記錄,並且記錄第一列包含行號,其他列不變

1、例子:每隔100行插入一條記錄,並且此條記錄的第一列包含行號,其他列與第一行相同 #!/bin/sh var="00001" # 變數 cat a.txt|awk 'NR==1'|while read line # 獲取檔案第一行

插入資料後直接得到這資料的id

今天遇到一個問題就是,想插入後繼續獲得主鍵然後再次操作! 可能有好幾種方法,今天親自測試使用的一種方法記錄一下,分享給大家! 針對的資料庫是MYSQ 主鍵自增l   以下面這個sql為例 <!-- 插入客戶檔案 --><insert id="insertCustom

vue 表格資料編輯,取消或者完成按鈕後,關閉編輯狀態沒有及時生效

點選編輯按鈕: 編輯狀態下,表格可以編輯。但是點選“確認”或者“取消”按鈕,列資料編輯狀態已經修改,但是檢視沒有改變。  頁面程式碼: 獲取當前行的index,並直接修改當前行用於判斷是否編輯狀態的資料為false(不可編輯);   根本原因是因為vue的檢視更新不及

vue 如何按鈕返回上

1,vue 如何點選按鈕返回上一頁呢?      這是vue掛載的範圍html程式碼       <div @click="goOff()">返回</div>   &nb

【IOS學習筆記】UITableView 隱藏鍵盤 且不影響其他事件

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)]; //加上這句不影響其他事件 tap.cancelsTouchesInView = NO

【IOS學習筆記】UITableView後取消預設選擇背景色

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //取消預設選中的效果 [_historyList deselectRowAtIndexPat

AsyncTask+gson資料展示+資料庫+網路判斷+刪除

** MainActivity頁面 ** package com.example.lx_zk1.activity; import android.support.design.widget.TabLayout; import android.support.v4.view.Vi

新增,增加

想要效果如下: HTML 程式碼 <tr> <th>視訊路徑</th> <td> <ul i

vue動態新增資料,並實現刪除

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>

圖片切換另張圖片

chang_msg: <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android

oracle寫一個先插入資料,在將該資料中一個欄位更新的觸發器的坑

最近剛用使用觸發器,原理上應該是在插入之後再更新,原本以為是以下這種寫法,在網上也找了很多方法,結果說的都不太對.需要更新的欄位根本沒有被更新,我想應該是邏輯上的問題: create or replace trigger UPDATE_REDLIST_TYPE afte

下一代HTML5之插入段視訊video或者插入段視訊的外掛

效果: 程式碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>逆水行舟不進則退</titl

mybatis 插入資料返回相應資料ID

<insert id="insertTaxiOrder" parameterType="map" useGeneratedKeys="true" keyProperty="ID" > INSERT INTO tb_TaxiOrderInfo ( UserID, D

UITableViewcell不走didSelect方法原因

用tableView把介面寫好之後,然後準備寫點選事件。卻發現死活不走didSelect這個協議方法。代理那些都設定了,直接斷點打在那,卻一直不走。開始認為是哪個控制元件把cell遮擋住了,然後我把所有的控制元件都註釋掉,卻發現還是不走。於是上網查了一下,有人說是因為這個方法 - (NSInde