在UITableView单元格的editActionsForRowAtIndexPath中删除旁边的编辑按钮的功能

时间:2016-04-24 04:53:37

标签: ios swift uitableview

我已经实现了“在单元格上向左滑动”功能以显示“编辑”和“删除”按钮,但我正在努力正确传递单元格的indexPathForCell,因为点击编辑按钮只会调出添加/编辑单元格查看,而不是预先填充添加/编辑中的字段,其中包含来自其编辑按钮被点击的单元格中的数据。

这是我的ItemTableViewController中的相关代码:

// swipe-left options for a cell (Edit, Delete)
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
    let delete = UITableViewRowAction(style: .Destructive, title: "Delete") { (action, indexPath) in
        // delete item at indexPath
        self.items.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    }

    let edit = UITableViewRowAction(style: .Normal, title: "Edit") { (action, indexPath) in
        // edit item at indexPath
        self.performSegueWithIdentifier("EditItem", sender: self)
    }

    return [delete, edit]
}


// Prepare for Segue
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "EditItem" {
        let ItemDetailViewController = segue.destinationViewController as! AddItemController

        // Get the cell that generated this segue.
        if let selectedItemCell = sender as? ItemTableViewCell {
            let indexPath = tableView.indexPathForCell(selectedItemCell)!
            let selectedItem = item[indexPath.row]
            ItemDetailViewController.item = selectedItem
        }
    }
    else if segue.identifier == "AddItem" {
        print("Adding new item.")
    }
}

如果我点击单元格本身,prepareForSegue函数可以正常工作,因为这是segue链接到的。最终,我想要点击单元格来触发另一个视图的不同segue,所以实际上我似乎必须废弃这个实现的大部分/大部分。我只需右键单击并从编辑单元格按钮拖动,但它在故事板中不可见,因此它的当前实现捎带了“点击单元”操作,但因为我想要“点击 - on-cell“segue to go where,我完全迷失了如何使用编辑按钮”获取此单元格的indexPath并转到“添加/编辑”视图“。

1 个答案:

答案 0 :(得分:1)

self.performSegueWithIdentifier("EditItem", sender: self) 你不应该发送self,而是你收到的indexPath,它是你要修改的对象的indexPath。

prepareForSegue中,对于segueIdentifier EditItem,您知道发件人是NSIndexPath,因此您使用它(实际上,您不必搜索tableView.indexPathForCell)。