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

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

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

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

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

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

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

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

布局:

SDViewController.m

#import "DetailViewController.h"
#define kCell @"cell"
@interface SDViewController ()
@property (nonatomic, retain) NSMutableArray *dataArray;
@end

@implementation SDViewController
- (void)dealloc
{
    self.dataArray = nil;
    [super dealloc];
}
  //配置右侧按钮
      self.navigationItem.rightBarButtonItem =self.editButtonItem;
    self.dataArray = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
    //注册
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kCell];

配置分区和行数:

//分区个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}
//行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.dataArray count];
}

设置cell的样式:

- (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;
}

设置是否可编辑:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}

设置处理编辑情况

- (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) {

    }
 }

重点:

//设置滑动时显示多个按钮
- (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];
}

效果:

时间: 2024-09-17 19:18:00

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

radiogroup-extjs中radio在选中状态下再次点击取消选中状态

问题描述 extjs中radio在选中状态下再次点击取消选中状态 具体的情况是,radiogroup中有3个radio,现在做好的效果是可以选中任意一个,但无法取消选中,也就是选中了就选中了,无法取消.现在想如果选中某个radio的话,再次点击这个radio就取消选中,恢复选择之前的状态,这个改怎么做? 是在 listeners:{ "checked":function(){}} 这个里面修改吗?如果是的话具体怎么修改? 补充:是单选,效果就是单选的效果,但是要在选择一个单选选项之后,

combo box-Qt5 中窗口全屏状态下,ComboBox的下拉框无法显示?以及文本输入框输入文字时无法切换输入法?

问题描述 Qt5 中窗口全屏状态下,ComboBox的下拉框无法显示?以及文本输入框输入文字时无法切换输入法? 主要是全屏状态下时会出问题! Qt5 中窗口全屏状态下,ComboBox的下拉框点击后无法显示,但仍然可以选中!以及文本输入框输入文字时无法切换输入法!!该怎么解决!!求大神 解决方案 http://www.oschina.net/question/2001267_194321 解决方案二: 有没有大神可以解决下啊,或者可以提供一些思路啊!! 解决方案三: 好像是由于父窗口中存在qml

支付宝扫描二维码-ios中怎样调用支付宝扫一扫功能?

问题描述 ios中怎样调用支付宝扫一扫功能? 在ios开发中,怎样调用支付宝钱包的扫一扫功能,或者,支付宝钱包里的扫一扫可以扫描手机图片怎样把图片传给支付宝使支付宝能够扫描?

如何获取GridView编辑状态下单元格里的值?

还在使用这样的代码吗? var txtName = grid1.Rows[e.RowIndex].Cells[0].FindControl("txtName") as TextBox;if (txtName != null){ // 读取值 //} 其实这些工作(在单元格中查找控件,并尝试获取其中的值)已经被封装了 .现在,只要调用 ExtractValuesFromCell 方法即可. 而该方法也被很多种列类型所支持: DataControlField, BoundField, Au

详解iOS中Button按钮的状态和点击事件_IOS

一.按钮的状态 1.UIControlStateNormal     1> 除开UIControlStateHighlighted.UIControlStateDisabled.UIControlStateSelected以外的其他情况,都是normal状态     2> 这种状态下的按钮[可以]接收点击事件 2.UIControlStateHighlighted     1> [当按住按钮不松开]或者[highlighted = YES]时就能达到这种状态     2> 这种状态

举例讲解iOS中延迟加载和上拉刷新/下拉加载的实现_IOS

lazy懒加载(延迟加载)UITableView 举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要滑动经过了,图片就开始加载了,这样用户体验就不太好,而且浪费内存.              这个时候,我们就可以利用lazy加载技术,当界面滑动或者滑动减速的时候,都不进行图片加载,只有当用户不再滑动并且减速效果停止的时候,才进行加载.               刚开始我异步加载图片利用SDWe

TableView编辑状态下跳转页面的崩溃处理

29down votefavorite 12 I have a viewController with a UITableView, the rows of which I allow to edit (delete) with a swipe - much like in the Mail app. I do it with, among other, this method: - (BOOL)tableView:(UITableView *)tableView canEditRowAtInd

DataGridView控件为何不能拖拽和拉伸(编辑状态下)?

问题描述 按下鼠标:移动鼠标:选中控件时不能拉伸调整,按下鼠标后无法拖拽控件,控件会从屏幕上消失,鼠标弹起后,又恢复到第一张图里的样子请各位高手给解答下啊.VS已经重装过了,用的是别人那边运行没问题的安装包. 解决方案 解决方案二:添加panel控件.picturebox控件后也是一样的效果.而且会使得button.checkbox这些控件也变成和它们一样的效果.解决方案三:大神们,帮忙看看啊~~解决方案四:你设置的属性问题..有不少属性都会导致此结果.你可以尝试重新建一个窗口,然后放datag

iOS中 UISearchController 搜索栏 UI技术分享

<p style="margin-top: 0px; margin-bottom: 0px; font-size: 20px; font-family: 'STHeiti Light';"><span style="color:#ff0000;">UISearchController 继承自UIViewController</span></p><p style="margin-top: 0px; mar