博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
##通讯录阶段重要代码
阅读量:5086 次
发布时间:2019-06-13

本文共 5726 字,大约阅读时间需要 19 分钟。

 

 

#pragma mark -------加载数据的方法---------//加载数据的方法- (void)handleData {    //获取文件路径    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"plist"];    //从文件路径中提取数组    NSArray *array = [NSArray arrayWithContentsOfFile:filePath];    //初始化模型数组    _dataArray = [[NSMutableArray alloc] initWithCapacity:0];    for (NSDictionary *dic in array) {        Student *stu = [[Student alloc] init];        [stu setValuesForKeysWithDictionary:dic];        [_dataArray addObject:stu];        [stu release];    }}#pragma mark -------UITableViewDelegate协议的方法---------//点击单元格触发的方法- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    //push传值、推出    DetailViewController *detailVC = [[DetailViewController alloc] init];    detailVC.stu = _dataArray[indexPath.row];        [self.navigationController pushViewController:detailVC animated:YES];    [detailVC release];}#pragma mark -------UITableViewDataSource协议的方法---------- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    return [_dataArray count];}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    static NSString *reuseIdentifier = @"reuse";    //通过重用标识符找cell    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];    if (cell == nil) {        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier] autorelease];    }    cell.selectionStyle = UITableViewCellSelectionStyleNone;    //获取模型    Student *stu = _dataArray[indexPath.row];    cell.textLabel.text = stu.name;    cell.detailTextLabel.text = stu.gender;    return cell;}#pragma mark -------AddViewControllerDelegate协议的方法---------//实现协议方法- (void)sendStudent:(Student *)student{    [_dataArray insertObject:student atIndex:0];    //重新加载    [self.tableView reloadData];}#pragma mark -------表视图移动操作---------//1、移动的第一步也是需要将表视图的编辑状态打开//- (void)setEditing:(BOOL)editing animated:(BOOL)animated{//    //先执行父类中的方法//    [super setEditing:editing animated:animated];//    //表视图执行此方法//    [self.tableView setEditing:editing animated:animated];//}//2、指定哪些行可以移动,默认都可以移动//-------UITableViewDataSource 协议的方法---------- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {    return YES;}//3、移动完成后要做什么事,怎么完成移动//-------UITableViewDataSource 协议的方法---------- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {    //先记录一下原有位置的模型数据    Student *student = _dataArray[sourceIndexPath.row];    [student retain];    //删除原位置下的模型数据    [_dataArray removeObjectAtIndex:sourceIndexPath.row];    //在新位置将记录的模型数据添加到数据数组中    [_dataArray insertObject:student atIndex:destinationIndexPath.row];    [student release];}#pragma mark -------删除、添加数据---------//1、让将要执行删除、添加操作的表视图处于编辑状态- (void)setEditing:(BOOL)editing animated:(BOOL)animated{    //先执行父类中的方法    [super setEditing:editing animated:animated];    //表视图执行此方法    [self.tableView setEditing:editing animated:animated];}//2、指定表视图中哪些行可以处于编辑状态//此方法如果不重写,默认所有的行可以进行编辑//-------UITableViewDataSource 协议的方法---------- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {    if (indexPath.row % 2 == 0) {        return YES;    }    return NO;}//3、指定编辑样式,到底是删除还是添加//此方法如果不重写,默认是删除样式//-------UITableViewDelegate 协议的方法---------- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {    return UITableViewCellEditingStyleInsert;}//4、提交,不管是删除还是提交,这个方法才是核心方法,当点击删除、或者添加按钮时,需要做什么事情,怎样才能完成删除或者添加操作,全部都在这里指定//点击删除按钮或提交按钮//-------UITableViewDataSource 协议的方法---------- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {    //1、表视图开始更新    [tableView beginUpdates];    //2、判断编辑样式    if(editingStyle == UITableViewCellEditingStyleDelete) {        //3、将该位置下的单元格删除        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];        //4、删除数据数组中与该单元格绑定的数据        [_dataArray removeObjectAtIndex:indexPath.row];    }else if (editingStyle == UITableViewCellEditingStyleInsert) {        Student *student = _dataArray[indexPath.row];        //构建一个位置信息        NSIndexPath *index = [NSIndexPath indexPathForRow:0 inSection:0];        [tableView insertRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationTop];        [_dataArray insertObject:student atIndex:index.row];    }    //5、表视图结束更新    [tableView endUpdates];}#pragma mark -------实现导航栏上的addBtn的方法---------- (void)addStu{    AddViewController *addVC = [[AddViewController alloc] init];    [self.navigationController pushViewController:addVC animated:YES];    addVC.delegate = self;    [addVC release];}- (void)viewDidLoad {    [super viewDidLoad];    self.navigationItem.title = @"通讯录";    self.view.backgroundColor = [UIColor whiteColor];        UIBarButtonItem *addBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addStu)];    self.navigationItem.rightBarButtonItem = addBtn;    [addBtn release];        //加载数据的方法    [self handleData];    //创建表视图    _tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStylePlain];    _tableView.delegate = self;    _tableView.dataSource = self;    [self.view addSubview:_tableView];        //每一个视图控制器都有一个编辑按钮,因为项目中编辑的应用场景非常多,所以系统预留了一个编辑按钮供我们使用    self.navigationItem.leftBarButtonItem = self.editButtonItem;        //添加删除//    [_tableView setEditing:YES animated:YES];}

 

   

转载于:https://www.cnblogs.com/chongyu/p/5209455.html

你可能感兴趣的文章
创龙TMS320C6748开发板串口和中断学习笔记
查看>>
01 C语言程序设计--01 C语言基础--第3章 基本数据类型01
查看>>
Java 反射机制详解(上)
查看>>
oracle drop table(表)数据恢复方法
查看>>
编译LAMP部署动态网站环境
查看>>
Java 8 新的时间日期 API
查看>>
PHP基本语法
查看>>
Linux命令应用大词典-第8章 日期和时间
查看>>
jenkins+maven+svn构建项目,及远程部署war包到tomcat上
查看>>
HDOJ 1233 还是畅通工程
查看>>
垃圾回收机制
查看>>
C# lambda表达式及初始化器
查看>>
Spring Boot 静态资源处理
查看>>
nginx vhost配置
查看>>
Vue 爬坑之路(二)—— 组件之间的数据传递
查看>>
Mysql客户端下载地址
查看>>
Apache 2.2, PHP 5, and MySQL 5
查看>>
Atitit 列出wifi热点以及连接
查看>>
5、Django实战第5天:首页和登录页面的配置
查看>>
linux系统挂载ISO文件
查看>>