【问题标题】:functionality for edit button next to delete in UITableView cells' editActionsForRowAtIndexPathUITableView 单元格的 editActionsForRowAtIndexPath 中删除旁边的编辑按钮的功能
【发布时间】:2016-04-24 04:53:36
【问题描述】:

我已经实现了“在单元格上向左滑动”功能以显示“编辑”和“删除”按钮,但我正在努力正确传递单元格的 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” 继续去其他地方,我完全不知道如何拥有编辑按钮“获取此单元格的 indexPath 并继续添加/编辑视图”。

【问题讨论】:

    标签: ios swift uitableview


    【解决方案1】:

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

    而在prepareForSegue中对于segueIdentifier EditItem,你知道sender是一个NSIndexPath,所以你使用它(其实不用搜索tableView.indexPathForCell)。

    【讨论】:

    • 感谢您的回复。您介意更具体地了解 prepareForSegue 函数的代码吗?
    • if segue.identifier == "EditItem" { let ItemDetailViewController = segue.destinationViewController as! AddItemController let indexPath = sender as! NSIndexPath let selectedItem = item[indexPath.row] ItemDetailViewController.item = selectedItem } 并在录制单元格时创建一个新的转场
    • 谢谢,成功了!对于那些不知道的人,以下是如何将转场添加到无法在情节提要中物理右键单击的 UI 元素:stackoverflow.com/questions/29294160/…(只需将 ViewController 本身的转场添加到所需的目的地)
    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多