iOS中 UITableViewRowAction tableViewcell编辑状态下的功能 UI技术分享

33 篇文章 0 订阅

转自: http://www.2cto.com/kf/201510/446622.html


* tableView:editActionsForRowAtIndexPath: // 设置滑动删除时显示多个按钮

* UITableViewRowAction // 通过此类创建按钮

* 1. 我们在使用一些应用的时候,在滑动一些联系人的某一行的时候,会出现删除、置顶、更多等等的按钮,在iOS8之前,我们都需要自己去实现。But,到了iOS8,系统已经写好了,只需要一个代理方法和一个类就搞定了

* 2. iOS8的协议多了一个方法,返回值是数组的tableView:editActionsForRowAtIndexPath:方法,我们可以在方法内部写好几个按钮,然后放到数组中返回,那些按钮的类就是UITableViewRowAction

* 3. 在UITableViewRowAction类,我们可以设置按钮的样式、显示的文字、背景色、和按钮的事件(事件在Block中实现)

* 4. 在代理方法中,我们可以创建多个按钮放到数组中返回,最先放入数组的按钮显示在最右侧,最后放入的显示在最左侧

* 5. 注意:如果我们自己设定了一个或多个按钮,系统自带的删除按钮就消失了...

布局:

SDViewController.m

 

?
1
2
3
4
5
6
7
8
9
10
11
12
# import DetailViewController.h
#define kCell @cell
@interface SDViewController ()
@property (nonatomic, retain) NSMutableArray *dataArray;
@end
 
@implementation SDViewController
- ( void )dealloc
{
     self.dataArray = nil;
     [ super dealloc];
}


 

 

?
1
2
//配置右侧按钮
     self.navigationItem.rightBarButtonItem =self.editButtonItem;
?
1
2
3
self.dataArray = [[NSMutableArray alloc]initWithObjects: @1 , @2 , @3 , @4 , @5 , nil];
//注册
[self.tableView registerClass:[UITableViewCell class ] forCellReuseIdentifier:kCell];

配置分区和行数:
?
1
2
3
4
5
6
7
8
9
//分区个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
 
     return 1 ;
}
//行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.dataArray count];
}

设置cell的样式:

 

 

?
1
2
3
4
5
6
7
8
9
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCell forIndexPath:indexPath];
     if (cell == nil) {
         cell = [[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleValue1) reuseIdentifier:kCell];
     }
   //cell上显示的内容
     cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row];
     return cell;
}
设置是否可编辑:
?
1
2
3
4
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
     // Return NO if you do not want the specified item to be editable.
     return YES;
}

 

设置处理编辑情况

 

?
1
2
3
4
5
6
7
8
9
10
11
- ( void )tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     if (editingStyle == UITableViewCellEditingStyleDelete) {
         // Delete the row from the data source
         //更新数据
         [self.dataArray removeObjectAtIndex:indexPath.row];
         //更新UI
         [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
     } else if (editingStyle == UITableViewCellEditingStyleInsert) {
  
     }
  }
重点:

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//设置滑动时显示多个按钮
- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{
//添加一个删除按钮
UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@删除 handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
     NSLog(@点击了删除);
     
     //1.更新数据
     [self.dataArray removeObjectAtIndex:indexPath.row];
     //2.更新UI
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationAutomatic)];
     
}];
     //删除按钮颜色
     deleteAction.backgroundColor = [UIColor cyanColor];
     //添加一个置顶按钮
     UITableViewRowAction *topRowAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@置顶 handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
         NSLog(@点击了置顶);
         //1.更新数据
         [self.dataArray exchangeObjectAtIndex:indexPath.row withObjectAtIndex: 0 ];
         //2.更新UI
         NSIndexPath *firstIndexPath =[NSIndexPath indexPathForRow: 0 inSection:indexPath.section];
         [tableView moveRowAtIndexPath:indexPath toIndexPath:firstIndexPath];
             }];
     
    //置顶按钮颜色
     topRowAction.backgroundColor = [UIColor magentaColor];
    
     
     //--------更多
 
     UITableViewRowAction *moreRowAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleNormal) title:@更多 handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
         DetailViewController *detailVC = [[DetailViewController alloc]init];
         [self.navigationController pushViewController:detailVC animated:YES];
        
     }];
     //背景特效
     //moreRowAction.backgroundEffect = [UIBlurEffect effectWithStyle:(UIBlurEffectStyleDark)];
 
     //----------收藏
     UITableViewRowAction *collectRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@收藏handler:^(UITableViewRowAction *action,NSIndexPath *indexPath) {
         
        
         
         UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@收藏 message:@收藏成功 delegate:self cancelButtonTitle:@确定 otherButtonTitles:nil, nil];
         
         [alertView show];
         [alertView release];
     }];
     //收藏按钮颜色
      collectRowAction.backgroundColor = [UIColor greenColor];
     
     //将设置好的按钮方到数组中返回
     return @[deleteAction,topRowAction,moreRowAction,collectRowAction];
    // return @[deleteAction,topRowAction,collectRowAction];
}
效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值