我把它放在cellForRowAtIndexPath中
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(CalorieCountViewController.handleLongPress))
cell.addGestureRecognizer(longPress)
longPress.cancelsTouchesInView = true
let tapPress = UITapGestureRecognizer(target: self, action: #selector(CalorieCountViewController.handleTapPress))
cell.addGestureRecognizer(tapPress)
tapPress.cancelsTouchesInView = true
并完全删除了didSelectRowAtIndexPath函数,而是使用indexPathForSelectedRow来获取用户刚刚选择的行。
func handleLongPress(sender: UILongPressGestureRecognizer){
let index = tableView.indexPathForSelectedRow!
doSomething(index)
}
func handleTapPress(sender: UITapGestureRecognizer){
let index = tableView.indexPathForSelectedRow!
doSomethingElse(index)
}
结果indexPathForSelectedRow返回nil,但我确实选择了一行,并且在我的代码中没有任何“deselectRowAtIndexPath”。
3条答案
按热度按时间2g32fytz1#
不要将
UILongPressGestureRecognizer
添加到Cell
。将其添加到viewDidLoad
中的UITableView
通过以下方式获取接触的单元格索引
使用
didSelectRowAtIndexPath
而不是UITapGestureRecognizer
是更好的方法knpiaxh12#
更新Swift4:
将这些行添加到viewController类的
viewDidLoad
中(在本例中,类的名称为YourViewController
)现在,将此
func
添加到viewController类中guykilcj3#
根据巴拉的答案,这里是swift 4或5
方法如下