zoukankan      html  css  js  c++  java
  • IOS之表视图单元格删除、移动及插入

     

    1.实现单元格的删除,实现效果如下

       

    Cpp代码 复制代码 收藏代码
    1. - (void)viewDidLoad  
    2. {  
    3.     [super viewDidLoad];  
    4.     //设置导航栏  
    5.      self.editButtonItem.title = @"编辑";  
    6.     self.navigation.rightBarButtonItem = self.editButtonItem;  
    7.     [self initTableViewData];  
    8.     // Do any additional setup after loading the view.  
    9. }  
    10.   
    11. - (void)didReceiveMemoryWarning  
    12. {  
    13.     [super didReceiveMemoryWarning];  
    14.     // Dispose of any resources that can be recreated.  
    15. }  
    16.   
    17. -(void)initTableViewData{  
    18.     NSBundle *bundle = [NSBundle mainBundle];  
    19.     NSString *plistPath = [bundle pathForResource:@"user_head" ofType:@"plist"];  
    20.     dataArr = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];  
    21. }  
    22.   
    23. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  
    24. {  
    25.     return [dataArr count];  
    26. }  
    27.   
    28. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  
    29. {  
    30.     static NSString *CellIdentifier = @"tableCell";  
    31.     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
    32.       
    33.     NSUInteger row = [indexPath row];  
    34.     NSDictionary *rowDict = [dataArr objectAtIndex:row];  
    35.     cell.textLabel.text =  [rowDict objectForKey:@"itemName"];  
    36.     NSLog(@"cell.label.text =  %@",[rowDict objectForKey:@"itemName"]);  
    37.       
    38.     NSString *imagePath = [rowDict objectForKey:@"itemImagePath"];  
    39.     cell.imageView.image = [UIImage imageNamed:imagePath];  
    40.     NSLog(@"cell.image.image  =  %@",imagePath);  
    41.       
    42.     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;  
    43.       
    44.     return cell;  
    45. }  
    46.   
    47. //选中Cell响应事件  
    48. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{  
    49.     [tableView deselectRowAtIndexPath:indexPath animated:YES];//选中后的反显颜色即刻消失  
    50.     NSUInteger row = [indexPath row];  
    51.     NSDictionary *rowDict = [dataArr objectAtIndex:row];  
    52.     NSString *userName =  [rowDict objectForKey:@"itemName"];  
    53.     NSLog(@"userName=%@",userName);  
    54. }  
    55.   
    56. //返回编辑状态的style  
    57. - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView  
    58.            editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath  
    59. {  
    60.     //UITableViewCellEditingStyleInsert  
    61. //    return UITableViewCellEditingStyleNone;  
    62.     return UITableViewCellEditingStyleDelete;  
    63. }  
    64. //完成编辑的触发事件  
    65. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle  
    66. forRowAtIndexPath:(NSIndexPath *)indexPath  
    67. {  
    68.     if (editingStyle == UITableViewCellEditingStyleDelete)  
    69.     {  
    70.         [dataArr removeObjectAtIndex: indexPath.row];  
    71.         //        [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]  
    72.         //                         withRowAnimation:UITableViewRowAnimationFade];  
    73.         [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]  
    74.                          withRowAnimation:UITableViewRowAnimationFade];  
    75.         [tableView reloadData];  
    76.     }   
    77. }  
    78. //UIViewController生命周期方法,用于响应视图编辑状态变化  
    79. - (void)setEditing:(BOOL)editing animated:(BOOL)animated {  
    80.     [super setEditing:editing animated:animated];  
    81.       
    82.     [self.tableView setEditing:editing animated:YES];  
    83.     if (self.editing) {  
    84.      self.editButtonItem.title = @"完成";  
    85.     } else {  
    86.         self.editButtonItem.title = @"编辑";  
    87.     }  
    88. }  
    89. @end  
    - (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.移动单元格

     

    Cpp代码 复制代码 收藏代码
    1. //完成移动的触发事件,不添加该方法不实现移动功能  
    2. - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath*)sourceIndexPath  
    3.       toIndexPath:(NSIndexPath *)destinationIndexPath  
    4. {  
    5.     NSDictionary *item = [dataArr objectAtIndex:sourceIndexPath.row];  
    6.     [dataArr removeObjectAtIndex:sourceIndexPath.row];  
    7.     [dataArr insertObject:item atIndex:destinationIndexPath.row];  
    8. }  
    //完成移动的触发事件,不添加该方法不实现移动功能
    - (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按钮

    Cpp代码 复制代码 收藏代码
    1. - (IBAction)addistItem:(UIBarButtonItem *)sender {  
    2.     AppUtils *appUtils = [AppUtils alloc];  
    3.     //需要先初始化一个UIAlertView  
    4.     UIAlertView *alert = [UIAlertView alloc];  
    5.     [appUtils showInputDialogWithTitle:@"add" message:@"please input new user name:" toAlertView:alert confirmAction:(^{  
    6.         //得到输入框  
    7.         UITextField *textField=[alert textFieldAtIndex:0];  
    8. //        不要写成NSMutableDictionary *newItem = [NSDictionary dictionary];  
    9.         NSMutableDictionary *newItem = [NSMutableDictionary dictionary];  
    10.         [newItem setObject:textField.text forKey:@"itemName"];  
    11.         [newItem setObject:@"1.jpeg" forKey:@"itemImagePath"];  
    12.         [dataArr addObject:newItem];  
    13.         [self.tableView reloadData];  
    14.     })];  
    15. }  
    - (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类

    Cpp代码 复制代码 收藏代码
    1. #import "AppUtils.h"  
    2. #include "RIButtonItem.h"  
    3. #include "UIAlertView+Blocks.h"  
    4.   
    5. @implementation AppUtils  
    6.   
    7. //弹出警告框,并实现警告框按钮的触发事件  
    8. - (void)showInputDialogWithTitle:(NSString *)title message:(NSString *)message toAlertView:(UIAlertView*) alert confirmAction:(void(^)(void))action{  
    9.     RIButtonItem* cancelItem = [RIButtonItem item];  
    10.     cancelItem.label = @"No";  
    11.     cancelItem.action = ^  
    12.     {  
    13.         //为NO时的处理  
    14.         UITextField *tf=[alert textFieldAtIndex:0];  
    15.         NSLog(@"UITextField=%@",tf.text);  
    16.     };  
    17.       
    18.     RIButtonItem* confirmItem = [RIButtonItem item];  
    19.     confirmItem.label = @"Yes";  
    20. //    confirmItem.action = action;  
    21.     alert = [alert initWithTitle:title  
    22.                                                     message:message  
    23.                                            cancelButtonItem:cancelItem  
    24.                                            otherButtonItems:confirmItem, nil];  
    25.       
    26.     alert.alertViewStyle = UIAlertViewStylePlainTextInput;  
    27.       
    28.     confirmItem.action = action;  
    29.     [alert show];  
    30. }  
    31. @end  
    #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
    

     

  • 相关阅读:
    数据结构实验之栈四:括号匹配
    数据结构实验之栈三:后缀式求值
    8月7日学习
    8月6日学习
    8月5日学习
    8月4日学习
    周总结
    8月3日学习
    8月2日学习
    8月1日学习
  • 原文地址:https://www.cnblogs.com/lovewx/p/4191510.html
Copyright © 2011-2022 走看看