UITableView编辑
2015-11-23 22:57
344 查看
编辑
编辑步骤:1. 开启TableView编辑状态
2. 允许哪个分区或者哪个分区的哪行是可以编辑的(默认 都能编辑)
3. 指定可以编辑样式(删除 添加)
4. 完成编辑(提交编辑)
完成编辑步骤:
1. 操作数据源数组 (添加 或 删除)
2. 刷新UI界面
删除和添加
// 添加编辑按钮 - (void)addBarButtonItem { UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(buttonItemAction:)]; self.navigationItem.rightBarButtonItem = buttonItem; [buttonItem release]; }
// 点击方法 - (void)buttonItemAction:(UIBarButtonItem *)buttonItem { // 1. 开启编辑状态 [self.tableView setEditing:!self.tableView.editing animated:YES]; // 编辑时更改标题 if (self.tableView.editing == YES) { buttonItem.title = @"完成"; }else{ buttonItem.title = @"编辑"; } }
// 2. 允许编辑 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // 可以利用indexPath控制哪个分区的哪行不能编辑 return YES; }
// 3. 指定编辑的样式 - (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { // 返回编辑样式 if (indexPath.section == 0) { // 分区1 if ([self.firstArray[indexPath.row] isEqualToString:@"添加"]) { return UITableViewCellEditingStyleInsert; } }else{ // 分区 if ([self.secondArray[indexPath.row] isEqualToString:@"添加"]) { return UITableViewCellEditingStyleInsert; } } return UITableViewCellEditingStyleDelete; }
// 4.提交编辑 // 根据编辑的样式 和 索引 去完成编辑 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 0) { // 分区1 if (editingStyle == UITableViewCellEditingStyleDelete) { // 删除 // 先删除数据 [self.firstArray removeObjectAtIndex:indexPath.row]; // 刷新页面 // 整体刷新(UITableView) 重新走一遍数据源代理方法 达到刷新页面的效果 // [tableView reloadData]; // 删除刷新 // 该方法可以进行多行删除 数组填写所有已经删除的索引 [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; }else{ // 添加 if (editingStyle == UITableViewCellEditingStyleInsert) { [self.firstArray insertObject:@"123" atIndex:indexPath.row]; [tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; } } }else{ // 分区2 if (editingStyle == UITableViewCellEditingStyleDelete) { [self.secondArray removeObjectAtIndex:indexPath.row]; [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; }else{ if (editingStyle == UITableViewCellEditingStyleInsert) { [self.secondArray insertObject:@"123" atIndex:indexPath.row]; [tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; } } } }
移动
移动步骤:1. 开启编辑状态
2. 允许哪个分区的哪一行 可以移动
3. 完成移动 (1.操作数据源数组 2.刷新UI界面)
// 允许移动 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { return YES; }
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { // sourceIndexPath 来源的索引 // destinationIndexPath 目的地的索引 if (sourceIndexPath.section == destinationIndexPath.section) { if (sourceIndexPath.section == 0) { // 把来源索引下 数组对应的元素 保存一下 NSString *str = self.firstArray[sourceIndexPath.row]; // 用来源的索引 删除数组中的对应元素 [self.firstArray removeObject:str]; // 插入到移动的目的地索引处 [self.firstArray insertObject:str atIndex:destinationIndexPath.row]; } if (sourceIndexPath.section == 1) { NSString *str = self.secondArray[sourceIndexPath.row]; [self.secondArray removeObject:str]; [self.secondArray insertObject:str atIndex:destinationIndexPath.row]; } } [tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath]; }
// 限制跨区移动 - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath { //proposedDestinationIndexPath 建议的目的地索引 if (sourceIndexPath.section == proposedDestinationIndexPath.section) { // 同区移动 可以返回 目的地的索引 return proposedDestinationIndexPath; }else{ // 跨区移动 需要限制(从哪里来 回哪里去) return sourceIndexPath; } }
相关文章推荐
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- Xcode target build settings Architectures
- [Django架构流程分析]Django中的request与response对象
- iOS UI基础-16.0 UIButton
- UI第十天:UITableView 编辑
- LeetCode Range Sum Query 2D - Immutable
- ValueStack详解:EL和OGNL用法
- UI之九宫格设计思路与实现技巧要点
- UiWatcher
- easyui datagrid如何解析 一个对象的子对象的多个属性
- continue、break、return的区别
- leetcode:N-Queens 问题
- easyui datagrid表格解析日期,成长整型
- UUID&UDID区别
- Codeforces 527D Clique Problem
- Modelsim/QuestaSim教程——DO文件篇
- UIViewController
- UIBarButtonItem、UINavigationController
- leetcode 128:Longest Consecutive Sequence