1. 程式人生 > >自定義UITableView實現自定義左滑刪除按鈕及多按鈕,拖拽cell和表頭進行排序

自定義UITableView實現自定義左滑刪除按鈕及多按鈕,拖拽cell和表頭進行排序

本文介紹了能拖拽cell和表頭進行排序的自定義UITableView,並且能自定義左滑顯示的UIButton樣式。

先看左滑自定義按鈕效果圖 

    override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

        let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "delete") { (_, _) in

            print("delete")

        }

        let okAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "ok") { (_, _) in

            print("ok")

        }

        return [deleteAction, okAction]

    }

通過代理SwipeBtnDelegate中的configSwipeBtn(updateDataSource 用於拖拽排序時更新資料來源)進行獲取在上方程式碼定義的2個按鈕

protocol SwipeBtnAndDragDelegate: NSObjectProtocol {

    func setupSwipeBtns(_ btns: [UIButton])

    func updateDataSource(isHeader: Bool, orignalIndexPath: IndexPath, destIndexPath: IndexPath)

}

獲取到按鈕後就可以對按鈕進行設定了

再看拖拽排序效果(需要設定tableview的isCanDragSrot屬性為true,長按1秒就可以開始排序了)

例如:

//更新資料來源

    func updateDataSource(isHeader: Bool, orignalIndexPath: IndexPath, destIndexPath: IndexPath) {

        if isHeader {

            let orign = orignalIndexPath.section

            let dest = destIndexPath.section

            self.sectionArray.swapAt(orign, dest)

        } else {

           // let tmp:[Int]

            if orignalIndexPath.section == 0 {

                self.cellArray1.swapAt(orignalIndexPath.row, destIndexPath.row)

            } else if orignalIndexPath.section == 1 {

                self.cellArray2.swapAt(orignalIndexPath.row, destIndexPath.row)

            } else {

                self.cellArray3.swapAt(orignalIndexPath.row, destIndexPath.row)

            }

        }

    }

參考資料: