IOS之表视图单元格删除、移动及插入
1.实现单元格的删除,实现效果如下
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- //设置导航栏
- self.editButtonItem.title = @"编辑";
- self.navigation.rightBarButtonItem = self.editButtonItem;
- [self initTableViewData];
- // Do any additional setup after loading the view.
- }
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- -(void)initTableViewData{
- NSBundle *bundle = [NSBundle mainBundle];
- NSString *plistPath = [bundle pathForResource:@"user_head" ofType:@"plist"];
- dataArr = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- return [dataArr count];
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- static NSString *CellIdentifier = @"tableCell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- NSUInteger row = [indexPath row];
- NSDictionary *rowDict = [dataArr objectAtIndex:row];
- cell.textLabel.text = [rowDict objectForKey:@"itemName"];
- NSLog(@"cell.label.text = %@",[rowDict objectForKey:@"itemName"]);
- NSString *imagePath = [rowDict objectForKey:@"itemImagePath"];
- cell.imageView.image = [UIImage imageNamed:imagePath];
- NSLog(@"cell.image.image = %@",imagePath);
- cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
- return cell;
- }
- //选中Cell响应事件
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
- [tableView deselectRowAtIndexPath:indexPath animated:YES];//选中后的反显颜色即刻消失
- NSUInteger row = [indexPath row];
- NSDictionary *rowDict = [dataArr objectAtIndex:row];
- NSString *userName = [rowDict objectForKey:@"itemName"];
- NSLog(@"userName=%@",userName);
- }
- //返回编辑状态的style
- - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
- editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- //UITableViewCellEditingStyleInsert
- // return UITableViewCellEditingStyleNone;
- return UITableViewCellEditingStyleDelete;
- }
- //完成编辑的触发事件
- - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
- forRowAtIndexPath:(NSIndexPath *)indexPath
- {
- if (editingStyle == UITableViewCellEditingStyleDelete)
- {
- [dataArr removeObjectAtIndex: indexPath.row];
- // [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
- // withRowAnimation:UITableViewRowAnimationFade];
- [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
- withRowAnimation:UITableViewRowAnimationFade];
- [tableView reloadData];
- }
- }
- //UIViewController生命周期方法,用于响应视图编辑状态变化
- - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
- [super setEditing:editing animated:animated];
- [self.tableView setEditing:editing animated:YES];
- if (self.editing) {
- self.editButtonItem.title = @"完成";
- } else {
- self.editButtonItem.title = @"编辑";
- }
- }
- @end
2.移动单元格
- //完成移动的触发事件,不添加该方法不实现移动功能
- - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath*)sourceIndexPath
- toIndexPath:(NSIndexPath *)destinationIndexPath
- {
- NSDictionary *item = [dataArr objectAtIndex:sourceIndexPath.row];
- [dataArr removeObjectAtIndex:sourceIndexPath.row];
- [dataArr insertObject:item atIndex:destinationIndexPath.row];
- }
3.添加单元格。下面是自定义触发事件,即单击左下角的add按钮
- - (IBAction)addistItem:(UIBarButtonItem *)sender {
- AppUtils *appUtils = [AppUtils alloc];
- //需要先初始化一个UIAlertView
- UIAlertView *alert = [UIAlertView alloc];
- [appUtils showInputDialogWithTitle:@"add" message:@"please input new user name:" toAlertView:alert confirmAction:(^{
- //得到输入框
- UITextField *textField=[alert textFieldAtIndex:0];
- // 不要写成NSMutableDictionary *newItem = [NSDictionary dictionary];
- NSMutableDictionary *newItem = [NSMutableDictionary dictionary];
- [newItem setObject:textField.text forKey:@"itemName"];
- [newItem setObject:@"1.jpeg" forKey:@"itemImagePath"];
- [dataArr addObject:newItem];
- [self.tableView reloadData];
- })];
- }
4.附上·AppUtils类
- #import "AppUtils.h"
- #include "RIButtonItem.h"
- #include "UIAlertView+Blocks.h"
- @implementation AppUtils
- //弹出警告框,并实现警告框按钮的触发事件
- - (void)showInputDialogWithTitle:(NSString *)title message:(NSString *)message toAlertView:(UIAlertView*) alert confirmAction:(void(^)(void))action{
- RIButtonItem* cancelItem = [RIButtonItem item];
- cancelItem.label = @"No";
- cancelItem.action = ^
- {
- //为NO时的处理
- UITextField *tf=[alert textFieldAtIndex:0];
- NSLog(@"UITextField=%@",tf.text);
- };
- RIButtonItem* confirmItem = [RIButtonItem item];
- confirmItem.label = @"Yes";
- // confirmItem.action = action;
- alert = [alert initWithTitle:title
- message:message
- cancelButtonItem:cancelItem
- otherButtonItems:confirmItem, nil];
- alert.alertViewStyle = UIAlertViewStylePlainTextInput;
- confirmItem.action = action;
- [alert show];
- }
- @end