自定義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)
}
}
}
參考資料: