UITableView编辑模式

Posted huahuahu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableView编辑模式相关的知识,希望对你有一定的参考价值。

UITableView有两种模式,普通模式和编辑模式。在编辑模式下可以对cell进行排序、删除、插入等等。

  1. 如何进入编辑模式
    调用tableView的setEditing(editing: Bool, animated: Bool)方法。

    • 进入编辑模式以后发生了什么

      • 向每个cell发送setEditing:animated:方法

        技术分享

      • 进入编辑模式以后cell的变化
        技术分享
        技术分享
        普通模式下cell的contentview的bounds就是cell的bounds.
        编辑模式下,cell有三部分组成,左边的Editing control,中间的contentview,右边的reordering control。这时contentview的位置和大小都发生了变化。
        所以一般情况下,把需要展示的东西加到contentview上,而不是cell上。文档是也有说明。

        The content view of a UITableViewCell object is the default superview for content displayed by the cell. If you want to customize cells by simply adding additional views, you should add them to the content view so they will be positioned appropriately as the cell transitions into and out of editing mode

  • 删除模式

    • 指定模式为删除模式

      func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
      return .Delete
      }
      
    • 定制删除提示语

      func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath: NSIndexPath) -> String? {
      return "我删除啦"
      }
      

      这时,cell右侧又多出来一个部分,叫做UITableViewCellDeleteConfirmtionView,不同的删除提示语,长度不一样。
      技术分享
      技术分享

  • 插入模式

    • 将style设为insert就好

      func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
      return .Insert
      }
      
    • 展示右边的排序按钮

      func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
      //do something    
      }
      

      实现这个方法就好,即使什么都不做
      技术分享

  • 展示多选按钮

        tableView?.allowsMultipleSelectionDuringEditing = true
        tableView?.tintColor = UIColor.blackColor()
    

    技术分享

  • swipe to delete

    • 实现相应的代理方法

      func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {   
      }
      

      这个方法里不能调用setEditing(_:animated:)方法

    • tableView(_:editingStyleForRowAt:)方法必须返回delete

以上是关于UITableView编辑模式的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableview 的编辑模式下滚动时删除按钮消失

UITableView编辑模式

UITableView 编辑模式

UITableView 处于编辑模式时选择行

仅在编辑模式下的 UITableView 部分标题

UITableView 在进入编辑模式时取消选择单元格