Swift MGSwipeTableCell滑动到删除单元格

时间:2015-07-28 21:16:22

标签: ios xcode swift uitableview uitableviewrowaction

我正在使用xCode 7 beta和Swift来实现MGSwipeTableCells的tableview。我这样做是因为我需要在每个单元格的左侧和右侧都有一个滑动按钮。这两个按钮都需要从tableview中删除单元格。

我尝试在向单元格添加按钮时使用便捷回调方法来执行此操作:

// Layout table view cell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("newsFeedCell", forIndexPath: indexPath) as! NewsFeedCell
    cell.layoutIfNeeded()

    // Add a remove button to the cell
    let removeButton = MGSwipeButton(title: "Remove", backgroundColor: color.removeButtonColor, callback: {
        (sender: MGSwipeTableCell!) -> Bool in

        // FIXME: UPDATE model
        self.numberOfEvents--
        self.tableView.deleteSections(NSIndexSet(index: indexPath.section), withRowAnimation: UITableViewRowAnimation.Fade)
        return true
    })
    cell.leftButtons = [removeButton]

但是,一旦我删除了第一个单元格,所有索引都会被抛弃,回调现在会删除一个不正确的单元格。也就是说,如果我删除cell_0,则cell_1现在成为表中的第0个。但是,与cell_1关联的按钮的回调会删除索引为1的单元格,即使它实际上现在是表格中的第0个单元格。

我试图实现MGSwipeTableCell委托方法,但无济于事。在执行我的代码时,没有调用过这些方法。我该如何解决这个问题?实施委托会解决这个问题吗?如果,那么可以提供一个例子吗?如果没有,你能否建议另一种方法,让桌面单元格的两侧都有可以删除所述单元格的滑动按钮?

2 个答案:

答案 0 :(得分:1)

你也可以这样做以获得正确的indexPath:

let removeButton = MGSwipeButton(title: "Remove", backgroundColor: color.removeButtonColor, callback: {
            (sender: MGSwipeTableCell!) -> Bool in

  let indexPath = self.tableView.indexPathForCell(sender)         
  self.tableView.deleteSections(NSIndexSet(index: indexPath.section), withRowAnimation: UITableViewRowAnimation.Fade)
            return true
        })

答案 1 :(得分:0)

使用委托方法将允许更清晰的按钮创建和表单元格删除,因为只有在刷卡时才会为单元格创建按钮(节省内存),并且您可以捕获对“发送方”的弱引用(处理程序中的MGTableViewCell或自定义类型,然后您可以从中获取索引路径。在Github上按照他们的例子: MGSwipeTableCell /演示/ MailAppDemo / MailAppDemo / MailViewController.m

然后在您的cellForRowAtIndexPath中,确保将单元格的委托设置为“self”。看起来你错过了这个,它应该用委托方法解决你的问题。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let reuseIdentifier = "cell"
    let cell = self.table.dequeueReusableCellWithIdentifier(reuseIdentifier) as! MGSwipeTableCell!
    cell.delegate = self

    // Configure the cell

    return cell
}

快乐的编码!