在TableViewCell中删除行后在TableViewController中删除行
问题描述:
我使用UITableViewController.swift和UITableViewCell.swift构建了一个包含CoreData的应用程序。在TableViewCell中删除行后在TableViewController中删除行
我试图通过在UITableViewCell.swift中使用UIPanGestureRecognizer来删除行,如同在Clear to-do应用程序中一样。我可以平移行左侧和右侧,但我不知道如何获得这些选定行的indexPath,并在所有数据所在的UITableViewController.swift中将其删除。
EduDicTableViewCell.swift:
override func awakeFromNib() {
super.awakeFromNib()
let recognizer = UIPanGestureRecognizer(target: self, action: #selector(EduDicTableViewCell.handlePan(_:)))
recognizer.delegate = self
addGestureRecognizer(recognizer)
}
//MARK: - horizontal pan gesture methods
func handlePan(recognizer: UIPanGestureRecognizer) {
// 1
if recognizer.state == .Began {
// when the gesture begins, record the current center location
originalCenter = center
}
// 2
if recognizer.state == .Changed {
let translation = recognizer.translationInView(self)
center = CGPointMake(originalCenter.x + translation.x, originalCenter.y)
// has the user dragged the item far enough to initiate a delete/complete?
deleteOnDragRelease = frame.origin.x < -frame.size.width/2.0
}
// 3
if recognizer.state == .Ended {
let originalFrame = CGRect(x: 0, y: frame.origin.y,
width: bounds.size.width, height: bounds.size.height)
if deleteOnDragRelease {
print("send it")
} else {
UIView.animateWithDuration(0.2, animations: {self.frame = originalFrame})
print("Bounced Back")
}
}
}
感谢您的阅读!
答
你可以在你的自定义单元格,这就要求在表视图控制器适当的方法使用委托/协议:
协议定义添加到单元格:
protocol EduDicTableViewCellDelegate {
func didSwipeDelete(cell: UITableViewCell)
}
,然后添加(可选)delegate
变量与此协议:
var delegate : EduDicTableViewCellDelegate? = nil
在handlePan
方法,添加一条线来调用委托方法当泛发布:
if deleteOnDragRelease {
print("send it")
self.delegate?.didSwipeDelete(self)
} else ...
注意,didSwipeDelete
方法传递self
- 这是刷卡的细胞。
在表格视图控制器,添加方法删除的细胞(使用的tableView的indexPathForCell
方法来获得对应于这是刷卡该小区的indexPath
):
func didSwipeDelete(cell: UITableViewCell) {
if let indexPath = self.tableView.indexPathForCell(cell) {
print("didSwipeDelete \(indexPath.section) - \(indexPath.row)")
// remove the object at this indexPath from the data source
// and delete the corresponding table view row
...
}
}
修改该表的类定义视图控制器,以表明它采用的协议:
class CustomTableViewController: UITableViewController, EduDicTableViewCellDelegate {
...
}
最后,在cellForRowAtIndexPath
方法,对细胞设置delegate
变量self
(表VI ew控制器):
cell.delegate = self
这是完美的!感谢数百万! –
非常好。谢谢! – Ibrahim