#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]; }