IOS開發——UI進階篇(四)全域重新整理,局部重新整理,左滑操作,左滑出現更多按鈕,進入編輯模式,大量刪除,自訂大量刪除

來源:互聯網
上載者:User

標籤:

首先建立項目,在storyboard如下布局控制項,設定好約束


然後建立cell模型類XMGWineCell
資料模型類XMGWine
建立UITableView,設定資料來源協議,實現資料來源方法
懶載入資料
這些在前面已經做過很多次了,代碼就不一一寫了

一、全域重新整理

1、添加單組資料並全域重新整理

- (IBAction)add {    // 添加模型資料    XMGWine *wine = [[XMGWine alloc] init];    wine.money = @"20.5";    wine.name = @"很好喝的酒";    wine.image = @"new_wine";    [self.wineArray insertObject:wine atIndex:0];        // 告訴tableView:模型資料改變了,趕緊重新整理表格    [self.tableView reloadData];}

2、刪除單組資料並全域重新整理

- (IBAction)remove {    // 刪除模型資料    [self.wineArray removeObjectAtIndex:0];    [self.wineArray removeObjectAtIndex:0];        // 告訴tableView:模型資料改變了,趕緊重新整理表格    [self.tableView reloadData];}

3、更改資料並全域重新整理

- (IBAction)update {     // 更改模型資料    XMGWine *wine = self.wineArray[0];    wine.money = @"100";        XMGWine *wine2 = self.wineArray[1];    wine2.name = @"哈哈";        // 告訴tableView:模型資料改變了,趕緊重新整理表格    [self.tableView reloadData];}

 

二、局部重新整理

1、添加多組資料並局部重新整理

- (IBAction)add {    // 添加模型資料    XMGWine *wine = [[XMGWine alloc] init];    wine.money = @"20.5";    wine.name = @"很好喝的酒";    wine.image = @"new_wine";    [self.wineArray insertObject:wine atIndex:0];        XMGWine *wine2 = [[XMGWine alloc] init];    wine2.money = @"100.5";    wine2.name = @"很好";    wine2.image = @"new_wine";    [self.wineArray insertObject:wine2 atIndex:0];        // 重新整理    NSArray *indexPaths = @[                            [NSIndexPath indexPathForRow:0 inSection:0],                            [NSIndexPath indexPathForRow:1 inSection:0]                            ];    [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];}

2、刪除多組資料並局部重新整理

- (IBAction)remove {    // 刪除模型資料    [self.wineArray removeObjectAtIndex:0];    [self.wineArray removeObjectAtIndex:0];        // 重新整理    NSArray *indexPaths = @[                            [NSIndexPath indexPathForRow:0 inSection:0],                            [NSIndexPath indexPathForRow:1 inSection:0]                            ];    [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationMiddle];}

3、修改多項資料並局部重新整理

- (IBAction)update {    // 更改模型資料    XMGWine *wine = self.wineArray[0];    wine.money = @"100";        XMGWine *wine2 = self.wineArray[2];    wine2.image = @"new_wine";        XMGWine *wine3 = self.wineArray[3];    wine3.image = @"new_wine";        // 局部重新整理    NSArray *indexPaths = @[                            [NSIndexPath indexPathForRow:0 inSection:0],                            [NSIndexPath indexPathForRow:2 inSection:0],                            [NSIndexPath indexPathForRow:3 inSection:0]                            ];    [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];}

 

三、左滑操作

先設定代理
1、只要實現了這個方法,左滑出現Delete按鈕的功能就有了
點擊了“左滑出現的Delete按鈕”會調用這個方法

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{    // 刪除模型    [self.wineArray removeObjectAtIndex:indexPath.row];        // 重新整理    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];}

2、修改Delete按鈕的文字  

 

/** *  修改Delete按鈕文字為“刪除” */- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{    return @"刪除";}

 

 

四、左滑出現更多按鈕

 

/** *  左滑cell時出現什麼按鈕 */- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{    UITableViewRowAction *action0 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"關注" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {        NSLog(@"點擊了關注");                // 收回左滑出現的按鈕(退出編輯模式)        tableView.editing = NO;    }];        UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"刪除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {        [self.wineArray removeObjectAtIndex:indexPath.row];        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];    }];        return @[action1, action0];}

 

 

五、進入編輯模式


我們先將刪除按鈕改一改

- (IBAction)remove {    // (上面的沒動畫效果,下面有動畫效果)//    self.tableView.editing = !self.tableView.isEditing;    [self.tableView setEditing:!self.tableView.isEditing animated:YES];}

點擊按鈕之後左邊會出現紅色圓點,點擊紅點的效果和左滑是一樣的,都可以進入編輯模式

 

六、大量刪除

重新設定按鈕

// 大量刪除按鈕- (IBAction)multipleRemove {    [self.tableView setEditing:!self.tableView.isEditing animated:YES];        self.removeButton.hidden = !self.tableView.isEditing;}- (IBAction)remove {    // self.tableView.indexPathsForSelectedRows = [0, 1]        // 獲得需要刪除的酒模型資料    NSMutableArray *deletedWineArray = [NSMutableArray array];    for (NSIndexPath *indexPath in self.tableView.indexPathsForSelectedRows) {        [deletedWineArray addObject:self.wineArray[indexPath.row]];    }        // 刪除模型資料    [self.wineArray removeObjectsInArray:deletedWineArray];        // 重新整理    [self.tableView deleteRowsAtIndexPaths:self.tableView.indexPathsForSelectedRows withRowAnimation:UITableViewRowAnimationLeft];}

並且在viewDidLoad中設定

 

  // 編輯模式的時候可以多選    self.tableView.allowsMultipleSelectionDuringEditing = YES;        // 隱藏刪除按鈕    self.removeButton.hidden = YES;

 

以上代碼就能實現系統內建的大量刪除

 

 

七、自訂大量刪除
功能:在選中後添加一個圖片來標記,所有標記的都可以大量刪除

1、首先在資料模型XMGWine中添加屬性checked

/** 是否被勾選 */@property (nonatomic, assign, getter=isChecked) BOOL checked;

2、實現代理方法,判斷打鉤控制項顯示還是隱藏

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    // 修改模型    XMGWine *wine = self.wineArray[indexPath.row];    wine.checked = !wine.isChecked;        // 重新整理    [tableView reloadData];}

注意:核心思想 "修改資料模型從而達到修改cell模型的目的"
如果直接在cell上添加一個圖片來標記選定與否,那麼在cell複用時會出現問題,你會發現往下滑 下面的有些cell也有圖片標記,記住,一般MVC模式中都是修改資料
那麼在這裡我們已經修改了wine.checked的值,下一步在cellForRowAtIndexPath方法中賦值時(也就是說在要顯示cell之前),在- (void)setWine:(XMGWine *)wine方法中實現下面這一句

    // 根據模型的checked屬性決定打鉤控制項顯示還是隱藏    self.checkImageView.hidden = !wine.isChecked;

3、刪除所有被打鉤的模型

- (IBAction)remove {    // 獲得所有被打鉤的模型    NSMutableArray *deletedWineArray = [NSMutableArray array];    for (XMGWine *wine in self.wineArray) {        if (wine.isChecked) {            [deletedWineArray addObject:wine];        }    }        // 刪除所有被打鉤的模型    [self.wineArray removeObjectsInArray:deletedWineArray];            // 重新整理表格    [self.tableView reloadData];}

因為上傳圖片總是失敗,以後再補上。。。

 

八.總結

這部分內容看起來方法挺多的,但都比較簡單,不過雖然簡單,但是沒有真正去敲就不會發現你那一塊知識點有漏洞

恩,就這樣~

 

IOS開發——UI進階篇(四)全域重新整理,局部重新整理,左滑操作,左滑出現更多按鈕,進入編輯模式,大量刪除,自訂大量刪除

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.