ios8tableView设置滑动删除时显示多个按钮 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

ios8tableView设置滑动删除时显示多个按钮

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:27


镔哥,研究良久最后才发明iOS8 TableView出新功能,然后就记下来,供大年夜家参考,为大年夜伙所用。
看我博客都知道,我一贯都是爱好代码注释结合,供给demo给大年夜伙参考,写得不好,不要见怪哦。

**
 *  tableView:editActionsForRowAtIndexPath:     // 设置滑动删除时显示多个按钮
 *  UITableViewRowAction                        // 经由过程词攀类创建按钮
 *  1. 我们在应用一些应用的时刻,在滑动一些接洽人的某一行的时刻,会出现删除、置顶、更多等等的按钮,在iOS8之前,我们都须要本身去实现。然则,到了iOS8,体系已经写好了,只须要一个代劳办法和一个类就搞定了
 *  2. iOS8的协定多了一个办法,返回值是数组的tableView:editActionsForRowAtIndexPath:办法,我们可以在办法内部写好几个按钮,然后放到数组中返回,那些按钮的类就是UITableViewRowAction
 *  3. 在UITableViewRowAction类,我们可以设置按钮的样式、显示的文字、配风景、和按钮的事宜(事宜在Block中实现)
 *  4. 在代劳办法中,我们可以创建多个按钮放到数组中返回,最先放入数组的按钮显示在最右侧,最后放入的显示在最左侧
 *  5. 留意:如不雅我们本身设定了一个或多个按钮,体系自带的删除按钮就消掉了...

下面就写下demo让大年夜家参考:
//
//  ViewController.m
//  UITableView-Demo
//
//  Created by huweibin on 15/1/4.
//  Copyright (c) 2014年 . All rights reserved.
//


#import "ViewController.h"


@interface ViewController () <UITableViewDataSource, UITableViewDelegate>


@property (nonatomic, retain) UITableView *tableView;
@property (nonatomic, retain) NSMutableArray *allDataArray;


@end
@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    [self addAllViews];
    [self loadAllData];
    
}


#pragma mark 添加全部页面元素
- (void)addAllViews
{
    self.tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [self.view addSubview:_tableView];
    
#warning iOS8 - 瓜分线样式
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
    UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
    _tableView.separatorEffect = blurEffect;
    
    // 注册
    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellIdentifier"];
    
    // 右上角编辑按钮
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}


#pragma mark 加载所稀有据
- (void)loadAllData
{
    self.allDataArray =[[NSMutableArray alloc] initWithObjects:@"王菲",@"周迅",@"李冰冰",@"白冰",@"紫薇",@"马苏",@"刘诗诗",@"赵薇",@"angelbaby",@"熊黛林",nil];
}




#pragma mark 编辑按钮
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    
    [_tableView setEditing:!_tableView.isEditing animated:YES];
}






#pragma mark - UITableViewDataSource Methods
#pragma mark 设置有若干分组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}


#pragma mark 设置每个分组有若干行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _allDataArray.count;
}
#pragma mark 设置某行上显示的内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    
    cell.textLabel.text = _allDataArray[indexPath.row];
//    cell.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 256.0 green:arc4random() % 256 / 256.0 blue:arc4random() % 256 / 256.0 alpha:1.0f];
    
    return cell;
}






#pragma mark 设置可以进行编辑
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
#pragma mark 设置编辑的样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}
#pragma mark 设置处理编辑情况
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // 1. 更新数据
        [_allDataArray removeObjectAtIndex:indexPath.row];
        
        // 2. 更新UI
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }
    
}

#pragma mark 设置可以移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
#pragma mark 处理移动的情况
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    // 1. 更新数据
    NSString *title = _allDataArray[sourceIndexPath.row];
    [_allDataArray removeObject:title];
    [_allDataArray insertObject:title atIndex:destinationIndexPath.row];
    
    // 2. 更新UI
    [tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath];
}


/**
 *  tableView:editActionsForRowAtIndexPath:     // 设置滑动删除时显示多个按钮
 *  UITableViewRowAction                        // 经由过程词攀类创建按钮
 *  1. 我们在应用一些应用的时刻,在滑动一些接洽人的某一行的时刻,会出现删除、置顶、更多等等的按钮,在iOS8之前,我们都须要本身去实现。But,到了iOS8,体系已经写好了,只须要一个代劳办法和一个类就搞定了
 *  2. iOS8的<UITableViewDelegate>协定多了一个办法,返回值是数组的tableView:editActionsForRowAtIndexPath:办法,我们可以在办法内部写好几个按钮,然后放到数组中返回,那些按钮的类就是UITableViewRowAction
 *  3. 在UITableViewRowAction类,我们可以设置按钮的样式、显示的文字、配风景、和按钮的事宜(事宜在Block中实现)
 *  4. 在代劳办法中,我们可以创建多个按钮放到数组中返回,最先放入数组的按钮显示在最右侧,最后放入的显示在最左侧
 *  5. 留意:如不雅我们本身设定了一个或多个按钮,体系自带的删除按钮就消掉了...
 */


#warning iOS8 -
#pragma mark 在滑着手势删除某一行的时刻,显示出更多的按钮
- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 添加一个删除按钮
    UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
        NSLog(@"点击了删除");
        
        // 1. 更新数据
        [_allDataArray removeObjectAtIndex:indexPath.row];
        // 2. 更新UI
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }];
    
//    // 删除一个置顶按钮
//    UITableViewRowAction *topRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"置顶" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
//        NSLog(@"点击了置顶");
//        
//        // 1. 更新数据
//        [_allDataArray exchangeObjectAtIndex:indexPath.row withObjectAtIndex:0];
//        
//        // 2. 更新UI
//        NSIndexPath *firstIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.section];
//        [tableView moveRowAtIndexPath:indexPath toIndexPath:firstIndexPath];
//    }];
//    topRowAction.backgroundColor = [UIColor blueColor];
    
    // 添加一个更多按钮
    UITableViewRowAction *moreRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"更多" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
        NSLog(@"点击了更多");
        
        [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];
    }];
    moreRowAction.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
    
    // 将设置好的按钮放到数组中返回
   // return @[deleteRowAction, topRowAction, moreRowAction];
    return @[deleteRowAction,moreRowAction];
}

相关案例查看更多