繁体   English   中英

如何将indexPath(而不是indexPath.row)传递到UITableViewCell的IBAction中

[英]How do I pass indexPath (not indexPath.row) into my IBAction for my UITableViewCell

我正在开发一个待办事项应用程序。 在我的应用程序中,我按下复选框按钮以删除一行。 我编写以下代码是为了将indexPath.row传递到我的复选框按钮中:

cell.checkbox.tag = indexPath.row
cell.checkbox.addTarget(self, action: "checkAction:", forControlEvents: .TouchUpInside)

第一个代码使我可以访问indexPath.row,第二个代码使我可以为按下按钮时创建一个函数。 这是我在按下按钮时使用的功能:

@IBAction func checkAction(sender: UIButton) {
    taskMgr.removeTask(sender.tag)
    tblTasks.reloadData()
}

现在,我想为其删除时添加动画,因此看起来并不那么突然。 我将使用的代码是这样的:

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)

但是,我只能在我的checkAction函数中访问indexPath.row。 如何获得对indexPath的访问权限(不牺牲indexPath.row)?

如果在四处移动行或添加或删除行直到重新加载整个表,标记可能会给您提供错误的行。 因此,可以在按钮方法中使用indexPathForRowAtPoint:来获取indexPath ,而不是使用标签。

@IBAction func checkAction(sender: UIButton) {

    let point = sender.convertPoint(CGPointZero, toView: self.tableView)
    let indexPath = self.tableView.indexPathForRowAtPoint(point)
    taskMgr.removeTask(indexPath.row)
    tblTasks.reloadData()
}

您可以将indexPath保存在视图控制器中:

class ViewController: UITableViewController {

    var toDeletedIndexPath: NSIndexPath?

    @IBAction func checkAction(sender: UIButton) {
        var cell = sender
        do {
            cell = cell.superview
        } while cell.isKindOfClass(UITableViewCell)

        self.toDeletedIndexPath = self.tableView.indexPathForCell(cell)

        tblTasks.reloadData()
    }
}

然后

tableView.deleteRowsAtIndexPaths([self.toDeletedIndexPath], withRowAnimation: UITableViewRowAnimation.Automatic)

如果您在表视图中只有一个部分,则建议您将标签分配给UIButton实例,并且标签值应等于indexPath.row

但是,如果您有多个部分,并且需要通过发件人访问按钮index path不是在按钮的touch事件中访问index path ,那么我认为应该子类化UIButton并添加NSIndexPath属性。 当创建Custom UIButton实例时,请将index path分配给custom button instanceindex path属性。 现在,单击按钮时,您可以访问索引路径,因为它是Custom UIButton的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM