我正在尝试检测集合视图中的长抽头表格视图单元格。
我有我的主视图控制器(MainVC类),它包含一个CollectionView(CollectionViewController类)。集合视图为每个单元格都有一个标签和一个TableView(TableViewController类)。 集合视图委托方法在MainVC中实现,tableView委托方法在CollectionViewController类中实现。
我试图在长时间点击时检测tableViewCell indexPath(以获取它的内容)。
执行检测的代码(Inside CollectionViewController):
override func awakeFromNib() {
super.awakeFromNib()
let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(self.longTapped(longPressGestureRecognizer:)))
longPressRecognizer.delegate = self
self.addGestureRecognizer(longPressRecognizer)
}
func longTapped(longPressGestureRecognizer: UILongPressGestureRecognizer) {
if longPressGestureRecognizer.state == UIGestureRecognizerState.began {
let touchPoint = longPressGestureRecognizer.location(in: self)
if let indexPath = self.eventsTableView.indexPathForRow(at: touchPoint) {
print(indexPath.row) //print the current *displayed* cell index
}
}
}
系统识别长按,但我遇到了问题。这段代码:
let indexPath = self.tableView.indexPathForRow(at: touchedPoint)
假设识别抽头单元indexPath,似乎找到当前显示的抽头单元索引。我的意思是如果设备当前没有显示20个单元格,indexPathForRow
将忽略它们,并仅计算显示的单元格。
因此,例如,如果我在表视图上有30行,并且用户当前正在查看第23行中的单元格,系统将认为该单元格(例如)在第4行中,因为它是第4个单元格目前显示。
我不知道是否与此tableView位于集合视图中的事实存在关联,但我希望这些额外信息可以帮助您(
非常感谢!
答案 0 :(得分:1)
试试这个:
var longpress = UILongPressGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
longpress = UILongPressGestureRecognizer(target: self, action: #selector(self.longPressGestureRecognized))
tableView.addGestureRecognizer(longpress)
}
@objc func longPressGestureRecognized(gestureRecognizer: UIGestureRecognizer) {
let longPress = gestureRecognizer as! UILongPressGestureRecognizer
if longPress.state == UIGestureRecognizerState.began {
let locationInTableView = longPress.location(in: tableView)
let indexPath = tableView.indexPathForRow(at: locationInTableView)
print(indexPath?.row ?? "-0")
}
}
答案 1 :(得分:-1)
didSelectRowAtIndexPath
我认为会在你的帮助下。检查它是什么,在使用之前不要忘记委托tableView