tableViewCell是否可以移动并具有扫描动作,编辑风格为.none

时间:2018-02-07 02:21:30

标签: ios swift uitableview

我正在尝试使用以下标准制作标准的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]
}
}

如果我注释掉另一个的功能,我可以获取要删除的滑动或移动代码,但我很好奇是否可以同时获取这两个功能。

由于

1 个答案:

答案 0 :(得分:1)

我今天刚遇到这个问题。这是我学到的:UITableView具有.editing属性-这是用于打开/关闭滑动动作和移动单元格的键。

当tableView.editing为true时->然后禁用tableView:didSelectRowAtIndexPath:和滑动操作,而UITableViewCell可以“编辑”(例如,移动)。

当tableView.editing为false时->然后tableView:didSelectRowAtIndexPath:和滑动动作起作用,并且UITableViewCell不能被“编辑”(例如,它们不能被拖动/移动)。

不幸的是,似乎没有深入挖掘您的条件是相互排斥的。我设想的最好的简单解决方案是通过按钮或手势(也许长按UITableView)来切换UITableView的.editing状态。

(也许这应该是评论-我没有足够的分数/因果关系来写评论-很抱歉,如果我违反协议,我只是想有用!)