我在UITableViewCell
上添加了一个自定义滑动手势,该手势会在滑动特定单元格时更新CoreData
。但是,我在将滑动单元格的indexPath
传递给将修改CoreData
的函数时遇到问题。我没有使用表格视图滑动操作 - 当滑动单元格以划掉项目时,我正在对单元格进行动画处理,这意味着我需要在自定义UITableViewCell
上调用动画。到目前为止,我已经尝试将滑动单元格的 indexPath 传递给 UISwipeGestureRecognizer 的#selector
,如下所示:
处理手势的函数:
@objc func handleSwipeGesture(sender: UISwipeGestureRecognizer ,at indexPath: IndexPath) {
itemArray[indexPath.row].complete = !itemArray[indexPath.row].complete
print("(itemArray[indexPath.row].complete)")
saveItems()
// call animation??
}
在UITableViewDelegate
cellForRowAt
中,我声明了滑动操作,并将滑动单元格的 indexPath 作为参数传递给上面的函数。
let swipeToComplete = SwipeCompletion.init(target: self, action: #selector(handleSwipeGesture))
swipeToComplete.indexPath = indexPath
cell.addGestureRecognizer(swipeToComplete)
这个类使我能够通过以下方式传递 indexPath:
class SwipeCompletion: UISwipeGestureRecognizer {
var indexPath: IndexPath!
}
但是,当我在单元格上滑动时,我会收到错误:EXC_BAD_ACCESS (code=1, address=0xf)
关于如何实现这一点以及如何在单元格上调用单元格动画的任何想法?
在这些"#selectors"上,您无法自定义传递给调用的值(据我所知(。
看起来你已将 indexPath 作为自定义识别器的属性。
使用该 indexPath,而不是传入的 indexPath。这可能不是正确的实例。
像这样的事情可能是你想做的。
@objc func handleSwipeGesture(sender: SwipeCompletion) {
itemArray[sender.indexPath.row].complete = !itemArray[sender.indexPath.row].complete
print("(itemArray[sender.indexPath.row].complete)")
saveItems()
//call animation??
}