UI_UITableView编辑

向左滑动

#pragma mark - 设置 tableView 能否编辑
- (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
{
    NSLog(@"点击了删除");
    // 实现 cell 编辑,必须先对数据源进行修改
    // 找到分组
    NSMutableArray *groupArray = self.dataDic[self.keysArray[indexPath.section]];

    // 判断该分组里面是否只有最后一个值
    if (groupArray.count < 2) {
        // 删除数据源(分组)
        [self.dataDic removeObjectForKey:self.keysArray[indexPath.section]];
        // 删除 keysArray 里面的 key 值
        [self.keysArray removeObjectAtIndex:indexPath.section];

        // 同时删除 UI_分组
        NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:indexPath.section];
        [tableView deleteSections:indexSet withRowAnimation:UITableViewRowAnimationBottom];

    } else {
        // 删除数据源 (cell)
        [groupArray removeObjectAtIndex:indexPath.row];
        // 同时删掉 UI_cell
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom];
    }
}
#pragma mark - 修改删除字样
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"删除";
}

上下拖动,交换位置

#pragma mark - 指定那些 cell 可以移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 如:禁止删除第一个
    if (indexPath == 0) {
        return NO;
    }
    return YES;
}
#pragma mark - 实现移动
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    // 改变数据源
    // 1、拿到小数组
    NSMutableArray *array = self.dataDic[self.keysArray[sourceIndexPath.section]];

    // 2、交换数组里面的数据
    // 拿出原来的数据
    Person *p = array[sourceIndexPath.row];
    Person *aperson = [[Person alloc] init];
    aperson.name = p.name;
    aperson.age = p.age;
    aperson.gender = p.gender;
    aperson.phoneNumber = p.phoneNumber;
    aperson.hobby = p.hobby;
    aperson.picture = p.picture;

    // 删除原来的数据
    [array removeObject:p];

    // 插入到目的位置
    [array insertObject:aperson atIndex:destinationIndexPath.row];

    // 3、改变 UI

    [tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath];
    //    [tableView reloadData];
}
#pragma mark - 限制跨区域移动
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
    // 判断分组是否相同
    if (sourceIndexPath.section == proposedDestinationIndexPath.section) {
        return proposedDestinationIndexPath;
    } else {
        return sourceIndexPath;
    }

}

版权声明:本文为outlan原创文章,未经博主允许不得转载。

时间: 2024-10-21 23:31:18

UI_UITableView编辑的相关文章

RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK--IOS版

1 编写目的 预期读者: 有视频编辑开发经验或者无经验的,打算或者正在使用"锐动IOS版RDVECore"的相关工程师. iOS软件工程师. 产品经理. QA 2 名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1080x720,640x480等. 帧率:每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数. 码率: 数据传输时单位时间传送的数据位数,一般我们用的

5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践

5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践 扩展 vim的特殊用法 http://www.apelearn.com/bbs/thread-9334-1-1.html vim常用快捷键总结 http://www.apelearn.com/bbs/thread-407-1-1.html vim快速删除一段字符 http://www.apelearn.com/bbs/thread-842-1-1.html vim乱码 http://www.apelearn.com/bbs/thr

Android EditText+ListPopupWindow实现可编辑的下拉列表

使用场景 AutoCompleteEditText只有开始输入并且与输入的字符有匹配的时候才弹出下拉列表.Spinner的缺点是不可以编辑.所以本文介绍如何使用EditText+ListPopupWindow实现可编辑的下拉列表.使用场景可以是有记住密码功能的登录框. 给EditText增加上下箭头 我们需要一个箭头图片,放在EditText的右面,用来点击后弹出下拉列表.如图所示 要想实现这个很容易,只需要在布局文件中给EditText设置一个drawableRight的属性. <EditTe

Dynamics 365 for CRM: Sitemap站点图的可视化编辑功能

Dynamics 365 for CRM 提供了Sitemap站点图的可视化编辑功能 在之前的所有版本中,我们只能通过从系统中导出站点图的XML进行编辑后再导入(容易出错),或使用第三方的Sitemap编辑工具进行编辑(非常方便). 在Dynamics 365 for CRM 中原生地提供了站点图的可视化编辑功能,非常强大方便: 1.在默认解决方案或自定义解决方案的"客户端扩展"中,找到"站点地图"记录:如果没有则需要点击"添加现成",添加&qu

JQuery实现可直接编辑的表格

本文实例讲述了JQuery实现可直接编辑的表格.分享给大家供大家参考.具体分析如下: 功能: 创建一个表格,用户单击某个单元格后,可以直接修改单元格文本.在编辑状态下,用户可按回车键确认修改,按ESC键撤销修改. 效果如下图: 思路: 当用户点击某个单元格后,立即向该单元格内插入一个文本框,将它的宽.高都设置成与单元格相的数值.用户确认输入后,清空该单元格内的所有HTML代码,然后把内容设置为用户刚刚输入的文本. HTML代码: <table align="center">

数据库操作:编辑表向线上表更新

需求:表edit需要将数据更新到表release,里边会涉及增删改操作,如何做比较好??? 1.edit表是最新的数据,release表是线上表. 2.会有不同的容器调用release表,也就是需要解决容器之间的锁的问题,其他容器只有读操作,正在操控的容器有读写操作,因为更新操作无法做到原子,所以在操作之间可能会遇到其他容器查询为空或读了一半等出错的状态 a.   在另外一张表version里,打上到底使用哪张表.   即读取数据的时候是在两个表之间来回跳跃的 以下操作在我们做update的容器

用户编辑新建_AngularJS实现

实现思路:分步骤完成开发,逐渐添加功能:1.实现输出users对象.2.实现点击“编辑”按钮,在表单中显示firstname和lastname,并不可修改.3.实现“新建用户”和“编辑用户”的切换.4.实现“创建新用户”按钮. 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>无标题文档</title> 6 <scrip

线性布局中按钮在编辑框右边的布局方法

<LinearLayout android:id="@+id/pop_footprint_comment" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true&quo

UI_10 表视图的编辑、UITableViewController

读取plist文件并将其内容显示到表视图上.并添加编辑(增加,删除).移动cell的操作. plist文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" " http://www.apple.com/DTDs/PropertyList-1.0.dtd ">