如何让tableViewCell同时处理tap和longPress?
我把它放在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来获取刚刚select的行用户。
func handleLongPress(sender: UILongPressGestureRecognizer){ let index = tableView.indexPathForSelectedRow! doSomething(index) } func handleTapPress(sender: UITapGestureRecognizer){ let index = tableView.indexPathForSelectedRow! doSomethingElse(index) }
结果indexPathForSelectedRow返回nil,但我没有select一行,并且在我的代码中没有任何“deselectRowAtIndexPath”。
不要将UILongPressGestureRecognizer
添加到Cell
。 将它添加到viewDidLoad
UITableView
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(CalorieCountViewController.handleLongPress)) yourTableView.addGestureRecognizer(longPress)
获取触摸的细胞索引
func handleLongPress(sender: UILongPressGestureRecognizer){ if longPressGestureRecognizer.state == UIGestureRecognizerState.Began { let touchPoint = longPressGestureRecognizer.locationInView(yourTableView) if let indexPath = yourTableView.indexPathForRowAtPoint(touchPoint) { // your code here, get the row for the indexPath or do whatever you want } } }
使用didSelectRowAtIndexPath
是一个更好的方法,而不是UITapGestureRecognizer
- 使用类似于新的Google Maps iOS应用程序的上滑视图,可能会遇到多个UIPanGestureRecognizer问题
- 为iMessage创建贴纸应用
- 为什么在XCode调试器中使用“Step over”function隐藏了应该很强的弱属性问题
- 以编程方式打开UITableView编辑操作button
- ASIHTTPRequest / ASIFormDataRequest – 在ARC下的块内引用请求对象
- iOS的自动续订
- searchResultsTableView显示两个相同的单元格
- 让UITableViewCell使用autolayout调整自身大小
- UIAlertView IndexButton