1. 程式人生 > >ios tableViewCell 陣列方式 全選、多選的刪除

ios tableViewCell 陣列方式 全選、多選的刪除

typedefNS_ENUM(NSUInteger, EditTypes) {

// 刪除狀態

    deleteForEditTypes = 0,

// 編輯狀態

    editForEditTypes,

};

@interfaceFavoriteBoard ()<UITableViewDelegate, UITableViewDataSource>

@property (weak, nonatomic) IBOutletUIToolbar *toolBar;

@property (weak, nonatomic) IBOutletUITableView *tableView;

// 編輯

@property (weak, nonatomic) IBOutletUIBarButtonItem *btnEdit;

// 選擇全部

@property (weak, nonatomic) IBOutletUIButton *btnSelectAll;

// 刪除

@property (weak, nonatomic) IBOutletUIButton *btnDelete;

// 資料來源

@property (strong, nonatomic) NSMutableArray *arrFavorites;

// 選擇的cell

@property (strong, nonatomic) NSMutableArray

*arrSelectRows;

@property (assign, nonatomic) EditTypes editType;

@property (strong, nonatomic) Favorite *favorite;

@end

@implementation FavoriteBoard

@synthesize arrFavorites;

@synthesize arrSelectRows;

- (void)viewDidLoad {

    [superviewDidLoad];

self.navigationController.navigationBar.barTintColor

= nil;

self.editType = deleteForEditTypes;

self.arrSelectRows = [NSMutableArrayarray];

self.arrFavorites = [NSMutableArrayarray];

    [self.toolBarsetHidden: YES];

    [self.btnDeletesetSelected: NO];

    [self.btnDeletesetEnabled: NO];

    [selfgetFavoriteList];

}

/**

 *  @brief 獲取收藏列表

 */

- (void)getFavoriteList

{

    [INKFavouriteViewModelfavoriteListWithCallback:^(id data, INKResponseError *error) {

self.arrFavorites = data;

if (self.arrFavorites.count != 0) {

self.noFavouriteView.hidden = YES;

            }

            [self.tableViewreloadData];

    }];

}

- (void)viewWillAppear:(BOOL)animated

{

if (self.arrFavorites.count == 0) {

        [self.btnEditsetEnabled:NO];

self.noFavouriteView.hidden = NO;

    }

}

- (void)viewDidDisappear:(BOOL)animated {

    [self.toolBarsetHidden:YES];

}

#pragma mark - 編輯狀態

- (IBAction)btnEdit:(id)sender {

if ([self.btnEdit.titleisEqualToString:@"編輯"]) {

self.btnEdit.title = @"取消";

self.editType = editForEditTypes;

        [self.tableViewsetEditing:YESanimated:YES];

        [self.toolBarsetHidden:NO];

    }

else

    {

self.editType = deleteForEditTypes;

self.btnEdit.title = @"編輯";

        [self.tableViewsetEditing:NOanimated:YES];

        [self.toolBarsetHidden:YES];

self.btnDelete.selected = NO;

self.btnDelete.enabled = NO;

        [arrSelectRowsremoveAllObjects];

    }

}

#pragma mark - 返回

- (IBAction)btnBack:(id)sender {

    [self.navigationControllerpopViewControllerAnimated:YES];

}

#pragma mark - 選擇全部

- (IBAction)btnSelectAllFavourite:(id)sender {

if (self.arrSelectRows.count != self.arrFavorites.count) {

        [self.arrSelectRowsremoveAllObjects];

        [self.arrSelectRowsaddObjectsFromArray:self.arrFavorites];

for (int i = 0; i < self.arrSelectRows.count; i ++) {

NSIndexPath *indexPath = [NSIndexPathindexPathForRow:i inSection:0];

// 遍歷陣列,將所有元素置為選中狀態

            [self.tableViewselectRowAtIndexPath:indexPath

animated:YES

scrollPosition:UITableViewScrollPositionNone];

        }

        [selfchangeButtonStatus];

    }

else {

for (int i = 0; i < self.arrSelectRows.count; i ++) {

// 取消選中狀態

NSIndexPath *indexPath = [NSIndexPathindexPathForRow:i inSection:0];

            [self.tableViewdeselectRowAtIndexPath:indexPath animated:YES];

        }

        [self.arrSelectRowsremoveAllObjects];

        [selfchangeButtonStatus];

    }

}

- (void)deleteToSelectIndexPath

{

    [INKFavouriteAndLikeViewModelfavoriteCancels:(NSArray *)self.arrSelectRows

withCallback:^(id data, INKResponseError *error) {

if (error == nil) {

                                             [arrFavoritesremoveObjectsInArray:arrSelectRows];

                                             [arrSelectRowsremoveAllObjects];

                                             [selfchangeButtonStatus];

if (self.arrFavorites.count == 0) {

self.noFavouriteView.hidden = NO;

                                                 [self.viewreloadInputViews];

                                             }

                                             [self.tableViewreloadData];

                                         }

                                     }];

}

#pragma mark - 多選刪除

- (IBAction)btnDeleteFavourite:(id)sender {

    [INKFavouriteAndLikeViewModelfavoriteCancels:(NSArray *)self.arrSelectRows

withCallback:^(id data, INKResponseError *error) {

if (error == nil) {

                                             [arrFavoritesremoveObjectsInArray:arrSelectRows];

                                             [arrSelectRowsremoveAllObjects];

                                             [selfchangeButtonStatus];

if (self.arrFavorites.count == 0) {

self.noFavouriteView.hidden = NO;

                                                 [self.viewreloadInputViews];

                                             }

                                             [self.tableViewreloadData];

                                         }

                                     }];

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

returnself.arrFavorites.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

NSString *favoriteImageCell    = @"favoriteImageCell";

NSString *favoriteLocationCell = @"favoriteLocationCell";

NSString *favoriteTextCell     = @"favoriteTextCell";

NSString *currentCell          = nil;

Favorite *favorite = [self.arrFavoritesobjectAtIndex:indexPath.row];

if (favorite.location != nil) {

        currentCell = favoriteLocationCell;

    }

else {

if (favorite.imageName != nil) {

            currentCell = favoriteImageCell;

        }

else {

            currentCell = favoriteTextCell;

        }

    }

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:currentCell forIndexPath:indexPath];

    [selfconfigCell:cell indexPath:indexPath];

return cell;

}

- (void)configCell:(UITableViewCell *)cell indexPath:(NSIndexPath *)indexPath

{

self.favorite = [self.arrFavoritesobjectAtIndex:indexPath.row];

    cell.data = self.favorite;

}

#pragma mark - 編輯後的選中與取消選中

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

self.favorite = [self.arrFavoritesobjectAtIndex:indexPath.row];

if (self.editType == editForEditTypes) {

        [self.arrSelectRowsaddObject:self.favorite];

        [selfchangeButtonStatus];

    }

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

{

self.favorite = [self.arrFavoritesobjectAtIndex:indexPath.row];

if (self.editType == editForEditTypes) {

        [self.arrSelectRowsremoveObject:self.favorite];

INFO(@"de arrSelectRows: %lu", (unsignedlong)arrSelectRows.count);

INFO(@"de arrFavorites : %lu", (unsignedlong)arrFavorites.count);

        [selfchangeButtonStatus];

    }

}

#pragma mark - 允許編輯

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

{

returnYES;

}

#pragma mark - 改變編輯狀態

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView

           editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

{

if (self.editType == editForEditTypes) {

returnUITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;

    }

returnUITableViewCellEditingStyleDelete;

}

#pragma mark - 單選刪除,修改方式

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

if (editingStyle == UITableViewCellEditingStyleDelete)

    {

        [INKFavouriteAndLikeViewModelfavoriteCancel:self.favorite

withCallback:^(id data, INKResponseError *error) {

if (error == nil) {

                                                [self.arrFavoritesremoveObjectAtIndex:indexPath.row];

                                                [tableView deleteRowsAtIndexPaths:@[indexPath]

withRowAnimation:UITableViewRowAnimationFade];

if (self.arrFavorites.count == 0) {

self.noFavouriteView.hidden = NO;

                                                }

                                            }

                                        }];

    }

elseif (editingStyle == (UITableViewCellEditingStyleInsert | UITableViewCellEditingStyleDelete)) {

    }

}

#pragma mark - 修改的狀態

- (void)changeButtonStatus

{   

if (arrSelectRows.count > 0) {

self.btnDelete.selected = YES;

self.btnDelete.enabled = YES;

    }

else {

self.btnDelete.selected = NO;

self.btnDelete.enabled = NO;

    }

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

}

@end