我正在尝试使用以下标准制作标准的UITableView:
1)细胞需要一直移动,右边是汉堡包图标
2)细胞需要轻扫动作。
3)单元格左侧没有默认的iOS删除图标(带有( - )的小红圈)
我尝试过一个示例项目,其中为表格实现了以下代码
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myTableView : UITableView!
var myArray = ["one","two","three","four","five"]
override func viewDidLoad() {
super.viewDidLoad()
self.myTableView.delegate = self
self.myTableView.dataSource = self
myTableView?.register(myTableCell.nib, forCellReuseIdentifier: myTableCell.identifier)
myTableView.isEditing = true
}
}
extension ViewController : UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myArray.count
}
func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
return .none
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: myTableCell.identifier, for: indexPath) as? myTableCell else {
return myTableCell()
}
cell.label.text = myArray[indexPath.row]
cell.showsReorderControl = true
return cell
}
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let rowToMove = myArray[sourceIndexPath.row]
myArray.remove(at: sourceIndexPath.row)
myArray.insert(rowToMove, at: destinationIndexPath.row)
}
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let deleteAction : UITableViewRowAction = UITableViewRowAction(style: .destructive, title: "Delete", handler: { (action,indexPath) -> Void in
self.myArray.remove(at: indexPath.row)
self.myTableView.deleteRows(at: [indexPath], with: .fade)
})
return [deleteAction]
}
}
如果我注释掉另一个的功能,我可以获取要删除的滑动或移动代码,但我很好奇是否可以同时获取这两个功能。
由于
答案 0 :(得分:1)
我今天刚遇到这个问题。这是我学到的:UITableView具有.editing属性-这是用于打开/关闭滑动动作和移动单元格的键。
当tableView.editing为true时->然后禁用tableView:didSelectRowAtIndexPath:和滑动操作,而UITableViewCell可以“编辑”(例如,移动)。
当tableView.editing为false时->然后tableView:didSelectRowAtIndexPath:和滑动动作起作用,并且UITableViewCell不能被“编辑”(例如,它们不能被拖动/移动)。
不幸的是,似乎没有深入挖掘您的条件是相互排斥的。我设想的最好的简单解决方案是通过按钮或手势(也许长按UITableView)来切换UITableView的.editing状态。
(也许这应该是评论-我没有足够的分数/因果关系来写评论-很抱歉,如果我违反协议,我只是想有用!)