UITableView删除添加和移动

#import "RootTableViewController.h"

@interface RootTableViewController ()

@property (nonatomic, strong) NSMutableArray *allDataArray;
@property (nonatomic, assign) UITableViewCellEditingStyle style;

@end

@implementation RootTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor lightGrayColor];

    // 设置导航栏
    self.navigationController.navigationBar.barTintColor = [UIColor orangeColor];
    self.title = @"尹浩";
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont systemFontOfSize:20]}];

    // 处理数据
    [self handleData];

    // 注册tableView
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];

    // 添加右按钮
    UIBarButtonItem *button1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(rightBarButtonItemClick:)];

    UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(moveClick:)];

    self.navigationItem.rightBarButtonItems = @[button1, button2];

    // 添加左按钮
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(leftBarButtonItemClick:)];
}

// 处理数据
- (void)handleData {

    // 1.初始化大数组
    self.allDataArray = [NSMutableArray array];

    // 2.定义三个数存放每一组学生的姓名
    NSMutableArray *array1 = @[@"泰隆", @"刀妹", @"卡牌大师", @"提莫", @"艾希", @"蛮王"].mutableCopy;

    NSMutableArray *array2 = @[@"盖聂", @"卫庄", @"天明", @"少羽", @"高月"].mutableCopy;

    NSMutableArray *array3 = @[@"尹浩", @"尹笑", @"尹双浩", @"尹冬冬", @"尹句号"].mutableCopy;

    // 3.将所有学生存放到大数组中
    [self.allDataArray addObject:array1];
    [self.allDataArray addObject:array2];
    [self.allDataArray addObject:array3];

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return self.allDataArray.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [self.allDataArray[section] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

    // 设置数据
    NSArray *array = [self.allDataArray objectAtIndex:indexPath.section];
    cell.textLabel.text = array[indexPath.row];

    return cell;
}

// 设置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    return 60;
}

// 取消选中状态
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

#pragma mark - 编辑(删除和添加)

// 右按钮点击事件
- (void)rightBarButtonItemClick:(UIBarButtonItem *)sender {

    self.style = UITableViewCellEditingStyleDelete;

    // 让cell处于编辑状态
    [self.tableView setEditing:!self.tableView.editing animated:YES];

}

// 左按钮点击事件
- (void)leftBarButtonItemClick:(UIBarButtonItem *)sender {

    self.style = UITableViewCellEditingStyleInsert;

    [self.tableView setEditing:!self.tableView.editing animated:YES];
}

// 指定哪些cell可以编辑
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.section == 0 || indexPath.section == 1) {
        return YES;
    }

    return NO;

}

// 设置编辑样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

    return self.style;
}

// 完成编辑
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleInsert) {

        [self.allDataArray[indexPath.section] insertObject:@"星魂" atIndex:indexPath.row + 1];

        NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
        [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationTop];

    } else if (editingStyle == UITableViewCellEditingStyleDelete) {

        [self.allDataArray[indexPath.section] removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
    }
}

#pragma mark - 移动

// 让cell处于编辑状态
- (void)moveClick:(UIBarButtonItem *)sender {

    [self.tableView setEditing:!self.tableView.editing animated:YES];
}

// 设置哪些cell可以移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {

    return YES;
}

// 开始移动
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {

    // 获取需要修改的数据
    NSString *sourceName = [self.allDataArray[sourceIndexPath.section] objectAtIndex:sourceIndexPath.row];

    // 先将数据从当前位置移除
    [self.allDataArray[sourceIndexPath.section] removeObjectAtIndex:sourceIndexPath.row];

    // 再将数据插入到对应的位置
    [self.allDataArray[destinationIndexPath.section] insertObject:sourceName atIndex:destinationIndexPath.row];

}

// 防止随意移动
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {

    if (sourceIndexPath.section == proposedDestinationIndexPath.section) {
        return proposedDestinationIndexPath;
    } else {
        return sourceIndexPath;
    }
}

@end
时间: 2024-10-07 17:06:17

UITableView删除添加和移动的相关文章

从UITableView删除一行与Model-View-Controls模型

正如在以前的帖子说,但是我在转到故事版(StoryBoard)教程之前,我有另外一个问题来回答. 我如何从UITableView删除一行呢? 当人们构建简单的表视图引用程序后,这是另一个常见的??问题.同样的,它比你想象的更容易.但在进入编码部分,我打算给你介绍一个程序员使用最多的设计模式,用户界面??编程的模型 - 视图 - 控制器模式(Model-View-Controller). 如果你是认真对待iOS编程的话,你无法逃避学习模型 - 视图 - 控制器(MVC).除了iOS编程,MVC也常

UITableView删除分组最后一个元素

UITableView删除分组最后一个元素,需要把分组同时删除. 1.首先在数据源上删除数据. 2.UI上删除cell: [tableView deleteRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 3.删除数据源上分组的元素. 4.UI上删除分组元素: [tableView deleteSections:[NSIndexSetind

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

UITableView的添加、删除、移动操作

#pragma mark -----表视图的移动操作----- //移动的第一步也是需要将表视图的编辑状态打开 //2.指定哪些行可以进行移动 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { //默认都可以移动 return YES; } //3.移动完成之后要做什么事,怎么完成移动 - (void)tableView:(UITableView *)tableV

IOS UITableView删除功能

UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,比如购物车等.删除功能可以直接使用系统自带的删除功能,当横向轻扫cell时,右侧出现红色的删除按钮,点击删除当前cell. 使用系统自带删除功能的步骤: 1.让tableView进入编辑状态,也就是设置它的editing为YES 2.返回编辑模式,也就是实现UITableViewDelegate中的tableview:editingStyleForRowAtIndexPath:方法,在里面返回删除模式.如果不实现,默认返

UITableView 删除行和行排序 这里只介绍代理方法

#pragma mark -代理方法 #pragma mark 设置cell表格高度 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 60; } #pragma mark 当cell实行编辑功能时调用 -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableVi

MySQL主键删除/添加

2修改数据库和表的字符集alter database maildb default character set utf8;//修改数据库的字符集alter table mailtable default character set utf8;//修改表的字符集如果您想要把表默认的字符集和所有字符列(CHAR, VARCHAR, TEXT)改为新的字符集,应使用如下语句:ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;警告:前面

iOS UITableView删除组中唯一行,即[UITableView _endCellAnimationsWithContext:] warning

在iOS项目中要删除某一行,此行是此组中最后一行,在使用 UITableView 的方法: self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .None) 但未能成功,Warning:Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.

IOS UITableView 底部添加按钮

一 要求效果 实现效果,在UITableView最底部添加提交按钮. 可以通过UITableView tableFooterView 实现 // accessory view below content. default is nil. not to be confused with section footer @property (nonatomic, retain) UIView *tableFooterView; 二 代码实现 - (void)viewDidLoad {     [sup