Swift:UITableView - 要删除的swipte - 如何在滑动时让单元格内容不移动

时间:2018-03-15 07:43:42

标签: ios swift uitableview

我已经在UITableView上实现了轻扫删除功能,它可以正常使用默认行为,即单元格的内容向左移动,同时在图像上滑动。我想要实现的(自定义)是在滑动时单元格内容上出现此删除按钮,即单元格中的文本不会移动。

我正在使用这种方法

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

        let delete = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in

            self.deletionDidStart(of: self.element(for: indexPath)!, at: indexPath)

            // use helper function to delete element at given index path
            let deleted = self.deleteElement(for: indexPath)

            // refresh tableView
            self.tableView.beginUpdates()
            self.tableView.deleteRows(at: [indexPath], with: .automatic)
            if let deletedSection = deleted.section {
                self.tableView.deleteSections(IndexSet(integer: indexPath.section), with: .automatic)
                self.deletedSection(deletedSection, at: indexPath)
            }
            self.tableView.endUpdates()

            // call deletion event handler
            self.deletedElement(deleted.element!, at: indexPath)
        }

        return [delete]
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

您应该覆盖setEditing

UITableViewCell方法
override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    let leadingSpace = 15
    let editingOffset = 80

    if editing == true {
        self.labelLeadingConstraint.constant = CGFloat(leadingSpace + editingOffset)
    } else {
        self.labelLeadingConstraint.constant = CGFloat(leadingSpace);
    }

    UIView.animate(withDuration: 0.1) {
        self.layoutIfNeeded()
    }
}

您需要IBOutlet UILabel's领先约束,并按照这种方式执行此操作。

这只是建议,实际代码可能会根据您的Cell布局进行更改。

<强>更新

也可以使用以下功能。

func tableView(_ tableView: UITableView, willBeginEditingRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath)
    cell?.setEditing(true, animated: true)
}

func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) {
    if let indexPath = indexPath {
        let cell = tableView.cellForRow(at: indexPath)
        cell?.setEditing(false, animated: true)
    }
}

希望这对你有所帮助。