iOS学习之UITableView编辑

时间:2021-11-11 00:21:59

一、UITableView编辑

  • UITableView编辑(删除、添加)步骤:
  1. 让TableView处于编辑状态。
  2. 协议设定:1)确定Cell是否处于编辑状态;2)设定cell的编辑样式(删除、添加);3)编辑状态进行提交。
  3. 注意:编辑结束后,由于numberOfRowSInSection这个协议只在tableView添加到父视图的时候走一次,而且table上的数据都是由数组提供,因此,需要先将数组中的元素删除,然后让table的协议重新走一遍进行重新赋值。即:先修改数据源,再刷新table。
  4. 代码示例:(因为要在两个按钮上添加不同的编辑样式,所以先在延展里声明了编辑样式属性)
    @interface RootViewController ()<UITableViewDataSource, UITableViewDelegate>
    // 声明属性编辑样式
    @property (nonatomic, assign) UITableViewCellEditingStyle style;
    @end
#pragma mark UITableView 编辑------
  // 实现左按钮点击事件
  - (void)leftClick
  {
      // 返回编辑样式要写在前面
      self.style = UITableViewCellEditingStyleInsert;
      [self.rootView.tableView setEditing:!self.rootView.tableView.editing animated:YES];

  }
  // 实现右按钮点击事件
  // 第一步:让TableView处于编辑状态
  - (void)rightClick
  {

      self.style = UITableViewCellEditingStyleDelete;
      [self.rootView.tableView setEditing:!self.rootView.tableView.editing animated:YES];
  }

  // 第二步:指定哪些cell可以被编辑
  - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
  {
      ) {
          return YES;
      }else {
        return NO;
      }
  }

  // 第三步:设置编辑样式
  - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
  {

      return self.style;
  }

  // 第四步:完成编辑,提交编辑状态
  - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
  {
      // 判断编辑样式
      ) {
          // 1.删除数据(顺序不能变)
          [self.allDataArray[indexPath.section] removeObjectAtIndex:indexPath.row];

          // 2.更新UI
          // 更新一行
          [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
          // 全部更新
          //    [tableView reloadData];
      }) {
          // 1.添加数据到数组中
          [self.allDataArray[indexPath.section] insertObject:];
          // 2.更新UI
          // 创建新一行的NSIndexPath对象,添加到下一行
          NSIndexPath *newIndexpath = [NSIndexPath indexPathForRow:indexPath.row +  inSection:indexPath.section];
          [tableView insertRowsAtIndexPaths:@[newIndexpath] withRowAnimation:UITableViewRowAnimationRight];
      }
  }
  • UITableView移动操作步骤:
#pragma mark UITableView 移动
    // 实现右按钮点击事件
    - (void)rightClick
    {
        // 处于编辑状态
        [self.rootView.tableView setEditing:!self.rootView.tableView.editing animated:YES];
    }
    //实现协议:告诉tableView是否能移动
    - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:    (NSIndexPath *)indexPath
    {
        return YES;
    }
    // 移动
    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
    {
        // 1.获取需要修改的数据
        NSString *sourceName = [self.allDataArray[sourceIndexPath.section] objectAtIndex:sourceIndexPath.row];
        // 2.先将数据从当前位置移除
        [self.allDataArray[sourceIndexPath.section] removeObjectAtIndex:sourceIndexPath.row];
        // 3.将数据插入到对应位置
        [self.allDataArray[destinationIndexPath.section] insertObject:sourceName atIndex:destinationIndexPath.row];

    }
#pragma mark 防止随意移动
    - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
    {
        // 如果是本组  移动
        if (sourceIndexPath.section == proposedDestinationIndexPath.section) {

            return proposedDestinationIndexPath;

        }
        // 如果不是 不能移动
        else {
            return sourceIndexPath;
        }
    }

二、UITableVIewController

  • UITableViewController概述:UITableViewController是继承于UIViewController中的一个类,简单的说UITableViewController是一个自带tableView的视图控制器。
    @interface UITableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
  • UITableViewController的特点:
  1. UITableViewController自带tableView。
  2. self.view不是UIView而是UITableView。
  3. datasource和delegate默认都是self。
  4. 因为继承于UIViewController,所以UITableViewController不用遵守协议就可以使用协议方法。
  5. 代码示例(一个新创建的UITableViewController):
    #import "TableViewController.h"

    @interface TableViewController ()

    @end

    @implementation TableViewController

    - (void)viewDidLoad {
        [super viewDidLoad];

        // Uncomment the following line to preserve selection between presentations.
        // self.clearsSelectionOnViewWillAppear = NO;

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    }

    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

  #pragma mark - Table view data source

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  #warning Incomplete implementation, return the number of sections
        ;
    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  #warning Incomplete implementation, return the number of rows
        ;
    }

    /*
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath];

        // Configure the cell...

        return cell;
    }
    */

    /*
    // Override to support conditional editing of the table view.
    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
        // Return NO if you do not want the specified item to be editable.
        return YES;
    }
    */

    /*
    // Override to support editing the table view.
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
            // Delete the row from the data source
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
        } else if (editingStyle == UITableViewCellEditingStyleInsert) {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
        }
    }
    */

    /*
    // Override to support rearranging the table view.
    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    }
    */

    /*
    // Override to support conditional rearranging of the table view.
    -(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
        // Return NO if you do not want the item to be re-orderable.
        return YES;
    }
    */

    /*
#pragma mark - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
    }
    */

    @end

iOS学习之UITableView编辑的更多相关文章

  1. iOS学习之UITableView中Cell的操作

    接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...

  2. iOS学习之UITableView

    一.UITableView的概念 UITabelView继承于UIScrollView,可以滚动. @interface UITableView : UIScrollView <NSCoding ...

  3. ios学习笔记 UITableView(纯代码) (二)

    头文件 --------------------------------------------- #import <UIKit/UIKit.h> /** UITableViewDataS ...

  4. ios学习笔记 UITableView(纯代码) (一)

    参考 “https://www.cnblogs.com/ai-developers/p/4557487.html” UITableViewCell 有一个代码重用 减少资源的浪费 参考  https: ...

  5. iOS学习30之UITableView编辑

    1. UITableView编辑 1> UITableView 编辑流程 2> UITableView 编辑步骤(四步) ① 第一步 : 让 TableView 处于编辑状态(在按钮点击事 ...

  6. iOS学习——tableview中带编辑功能的cell键盘弹出遮挡和收起问题解决

    最近在项目中经常用到UITableView中的cell中带有UITextField或UITextView的情况,然后在这种场景下,当我们点击屏幕较下方的cell进行编辑时,这时候键盘弹出来会出现遮挡待 ...

  7. iOS学习笔记之UITableViewController&amp&semi;UITableView

    iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...

  8. iOS学习笔记(4&rpar; — UITableView的 重用机制

    iOS学习笔记(4) — UITableView的 重用机制 UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的 ...

  9. IOS第七天&lpar;6&colon;UiTableView编辑模式&comma; 拖动位置 &comma;滑动删除&rpar;

    **********UiTableView编辑模式, 拖动位置 ,滑动删除 #import "HMViewController.h" @interface HMViewContro ...

随机推荐

  1. BZOJ-2038 小Z的袜子(hose) 莫队算法

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 5573 Solved: 2568 [Subm ...

  2. 7&period;Constants and Fields

    1.Constants is a symbol that has a never-changing value.  its value must be determinable at compile ...

  3. 使用RMAN迁移文件系统数据库到ASM

    --================================== -- 使用RMAN迁移文件系统数据库到ASM --================================== 在实际 ...

  4. 专业辟谣----ThinkSNS不仅仅是微博程序!

    [摘要]ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+. ThinkSNS这个词,第一眼应该想到的 ...

  5. socket对象放在一个datagridview的row的tag里面在拿出来 为什么是已释放

     socket对象放在一个datagridview的row的tag里面在拿出来 为什么是已释放 

  6. Vue&period;js响应式原理

      写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:answershuto/learnV ...

  7. Windows 下安装 Memcached

    Windows 下安装 Memcached 官网上并未提供 Memcached 的 Windows 平台安装包,我们可以使用以下链接来下载,你需要根据自己的系统平台及需要的版本号点击对应的链接下载即可 ...

  8. HDU 3948 The Number of Palindromes(Manacher&plus;后缀数组)

    题意 求一个字符串中本质不同的回文子串的个数. $ 1\leq |string| \leq 100000$ 思路 好像是回文自动机的裸题,但是可以用 \(\text{Manacher}\) (马拉车) ...

  9. Mybatis Generator xml格式配置

    Mybatis Generator可以使用Maven方式和Java方法,使用Maven这里是配置文件: <?xml version="1.0" encoding=" ...

  10. C&num;Arcengine通过坐标点生成面&lpar;环形&rpar;

    来自:http://www.cnblogs.com/lee24789229/p/5481978.html 通过传入坐标点,返回几何图形,此代码部分可以生成环形面. 方法一 private IGeome ...