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