我正在尝试创建一种方法来选择一个单元格,以便我可以编辑它。使用当前代码,向上的单元格总是下一个单元格。并且我的tableView
中的最后一个单元格不能被选择。
@objc func handleLongPress(_ longPressGestureRecognizer: UILongPressGestureRecognizer) {
if longPressGestureRecognizer.state == UIGestureRecognizerState.began {
let touchPoint = longPressGestureRecognizer.location( in : self.view)
if let indexPath = tableView.indexPathForRow(at: touchPoint) {
let context = (UIApplication.shared.delegate as!AppDelegate).persistentContainer.viewContext
let cell_selected = classements[indexPath.row]
nomAjouterOutlet.text = cell_selected.nom
pointAjouterOutlet.text = "\(cell_selected.point)"
classeAjouterOutlet.text = cell_selected.classe!
// Context CoreData
context.delete(cell_selected)
(UIApplication.shared.delegate as!AppDelegate).saveContext()
do {
classements =
try context.fetch(Tournoi.fetchRequest())
} catch {
print("Fetching Failed")
}
classementTableView.reloadData()
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
let longPressGesture: UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(ClassementViewController.handleLongPress(_: )))
longPressGesture.minimumPressDuration = 1.0
longPressGesture.delegate = self
self.tableView.addGestureRecognizer(longPressGesture)
}
2条答案
按热度按时间ozxc1zmp1#
我发现了我的错误。下面是有效的代码。
Swift 4
来自shareedit回答了Jan 18 11:05
PinkeshGjr 1,28121225
nnvyjq4y2#
由于OP的回答没有足够的解释,我想添加这个答案作为OP答案的补充答案。错误实际上是在以下代码中:
由于该位置是从主
view
内获得的,返回的触摸点是相对于view
的。然而,view
和tblMessage
的y点之间存在差异,导致所选单元格向下移动。这可能是由于view
内的导航条导致y point
的这种移动。如果导航ba的高度是已知的,我们可以通过将差值应用于touchPoint
的y
属性(如touchpoint.y -= navBarHeight
)来获得正确的触摸点。因此,获取触摸点的适当方法是使用
tableView
作为偏移量,以便location(in:)
函数可以正确计算触摸点。最终,当我们将location(in:)
的参数从view
替换为tblMessage
(tableView本身)时,我们应该得到正确的点。