美文网首页程序员iOS进阶指南iOS Developer
UITableView(六)数据更新(增、删、改)

UITableView(六)数据更新(增、删、改)

作者: 飞翔的道长 | 来源:发表于2016-05-01 23:39 被阅读790次
    • 新建一个包含UITableView的View并绑定好测试数据,本文所用的布局如下图

    • 分别对添加、编辑、修改、删除四个按钮添加点击事件

      • 添加按钮的实现代码

        
        - (IBAction)Add:(UIButton *)sender {
        WXData *data = [[WXData alloc]init];
        data.price =[NSString stringWithFormat:@"%d",arc4random_uniform(1000)];
        data.title = @"我是新增的";
        data.buyCount = @"22";
        data.icon = @"2c97690e72365e38e3e2a95b934b8dd2";
        
        // 在数据源的第一个位置插入数据
        [self.list insertObject:data atIndex:0];
        
        // 刷新插入行,有动画效果
        [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
        
        // 刷新全部数据,但是没有动画效果
        // self.tableView reloadData];
        

    }

    ```
    
    • 编辑按钮的实现代码

      - (IBAction)Edit:(UIButton *)sender {
        // 设置tableView是否进入编辑模式
        [self.tableView setEditing:!self.tableView.isEditing animated:YES];
      

    }
    ```

    • 删除按钮的实现代码

      - (IBAction)remove:(UIButton *)sender {
          [self.list removeObjectAtIndex:0]; //从模型中删除
      
          [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]  withRowAnimation:UITableViewRowAnimationRight];
      }
      
    • 更新按钮的实现代码

      - (IBAction)Update:(UIButton *)sender {
      WXData *data = self.list[0];
      data.price = [NSString stringWithFormat:@"%d",50 + arc4random_uniform(100)];
      
      [self.tableView reloadData];
      

    }
    ```

    • 效果如下

    • 注意点

      • tableView的数据操作全部是通过模型数据来进行的,应该先修改模型数据再调用刷新方法。
      • 不要直接修改Cell上面控件,比如直接修改某个label的text属性。不要直接修改Cell上面控件,比如直接修改某个label的text属性。不要直接修改Cell上面控件,比如直接修改某个label的text属性。

    • 左滑删除效果

      • UITableView的左滑删除方法只需要实现-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 方法,功能实现需要写到该方法中。
      
      -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
        
        if(editingStyle == UITableViewCellEditingStyleDelete){ // 删除
            [self.list removeObjectAtIndex:indexPath.row]; //从模型中删除
            
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        } if(editingStyle == UITableViewCellEditingStyleInsert) // 新增
        {
            NSLog(@"新增");
        }
      

    }

    
    ![](https://img.haomeiwen.com/i1717369/b2edd828bf6b9bc5.jpg?imageMogr2/auto-orient/strip)
      
      - ###小tips
      可能以后会碰到奇葩需求,需要在编辑状态下需要有新增按钮,apple其实是有提供的。只需要实现- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath方法即可。
      
      ```objc
      /**
     * 这个方法决定了编辑模式时,每一行的编辑类型:insert(+按钮)、delete(-按钮)
     */
    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return indexPath.row % 2 == 0? UITableViewCellEditingStyleInsert : UITableViewCellEditingStyleDelete;
    }
    
      ```
      ![](https://img.haomeiwen.com/i1717369/f7ea018cc987a053.jpg?imageMogr2/auto-orient/strip)

    相关文章

      网友评论

        本文标题:UITableView(六)数据更新(增、删、改)

        本文链接:https://www.haomeiwen.com/subject/ffclrttx.html