当前位置:首页 > 操作系统 > Ios

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

镔哥,研究很久最后才发现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 ] ;

}


原文:http://blog.csdn.net/sammyieveo/article/details/42418115


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!