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

 

 

猜你喜欢

转载自ikrboy.iteye.com/blog/2005797