为什么我的代码选择下一个单元格? - UILongPressGestureRecognizer

问题描述 投票:0回答:2

我正在尝试创建一种选择单元格的方法,以便我可以对其进行编辑。使用当前代码,上升的单元格始终是下一个单元格。而我

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)
}
uitableview uilongpressgesturerecogni
2个回答
1
投票

我发现了我的错误,这是有效的代码!谢谢分享

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()
    setupLongPressGesture()
}

func setupLongPressGesture() {
    let longPressGesture:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(self.handleLongPress))
    longPressGesture.minimumPressDuration = 1.0 // 1 second press
    longPressGesture.delegate = self
    self.tblMessage.addGestureRecognizer(longPressGesture)
}

@objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer){
    if gestureRecognizer.state == .ended {
        let touchPoint = gestureRecognizer.location(in: self.tblMessage)
        if let indexPath = tblMessage.indexPathForRow(at: touchPoint) {

        }
    }
}

分享编辑 1 月 18 日 11:05 回答

PinkeshGjr 1,28121225


0
投票

由于 OP 的回复没有足够的解释,我想添加这个答案作为 OP 答案的补充答案。错误实际上是在下面这段代码中:

let touchPoint = longPressGestureRecognizer.location( in : self.view)

由于位置是从主

view
内获取的,所以返回的触摸点是相对于
view
的。然而,view
tblMessage
y点
之间存在差异,导致移动到所选单元格的下方。这可能是由于
view
中的导航栏导致
y point
的这种转变。如果导航 ba 的高度已知,我们可以通过将差异应用到
touchPoint
y
属性(例如
touchpoint.y -= navBarHeight
.
)来获得正确的触摸点 所以获得接触点的适当方法是使用
tableView
作为偏移量,以便 tableView 本身的
location(in:) function can calculate the touch point correctly. Eventually, when we replace the 
location(in:)
's parameter from 
view
to
tblMessage`,我们应该得到正确的点。

let touchPoint = gestureRecognizer.location(in: self.tblMessage)
© www.soinside.com 2019 - 2024. All rights reserved.