[英]How can I get a uitableViewCell by indexPath.row or only row number instead of indexpath?
[英]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 instance
的index path
属性。 现在,单击按钮时,您可以访问索引路径,因为它是Custom UIButton
的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.