indexPathForRow(at: location) 总是 [0, 0]
indexPathForRow(at: location) always [0, 0]
我一直在阅读,但我无法解决这个奇怪的行为。
我在 Mac Catalyst 应用程序中使用 UIContextMenu
。每当用户右键单击 tableViewCell
我需要获取该行的数据源对象。
我已经实施了以下内容:
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
let indexPath = tableView.indexPathForRow(at: location)
print("location:", location)
let object = ds[indexPath.row]
//.... rest of the code
}
即使我有更多的单元格,上面总是打印出 indexPath 是 (0, 0)
。
我尝试使用以下方法将位置转换为 tableView
:
let locationInTableView = view.convert(location, to: tableView)
然后将其用于:
let indexPath = tableView.indexPathForRow(at: locationInTableView)
但结果总是一样
我是不是做错了什么?
您在上下文菜单的回调中收到的值是 CGPoint
,这是点击发生在交互视图坐标 space 中的坐标。 (documentation)
索引路径不是坐标,而是从零开始的行的整数索引。
要实现您想要做的事情,您需要一个额外的步骤来询问 table 视图给定坐标下的行索引是什么。结果是可选的,如果点击没有落在任何行的顶部,则结果为 nil
。
获得正确结果的另一件事是使用 UIContextMenuInteraction
的 method 获取 table 视图坐标 space 内的坐标。
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
let locationInTableView = interaction.location(in: tableView)
guard let indexPath = tableView.indexPathForRow(at point: locationInTableView) else {
// clicked not on a row
return
}
let object = ds[indexPath.row]
...
}
}
我一直在阅读,但我无法解决这个奇怪的行为。
我在 Mac Catalyst 应用程序中使用 UIContextMenu
。每当用户右键单击 tableViewCell
我需要获取该行的数据源对象。
我已经实施了以下内容:
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
let indexPath = tableView.indexPathForRow(at: location)
print("location:", location)
let object = ds[indexPath.row]
//.... rest of the code
}
即使我有更多的单元格,上面总是打印出 indexPath 是 (0, 0)
。
我尝试使用以下方法将位置转换为 tableView
:
let locationInTableView = view.convert(location, to: tableView)
然后将其用于:
let indexPath = tableView.indexPathForRow(at: locationInTableView)
但结果总是一样
我是不是做错了什么?
您在上下文菜单的回调中收到的值是 CGPoint
,这是点击发生在交互视图坐标 space 中的坐标。 (documentation)
索引路径不是坐标,而是从零开始的行的整数索引。
要实现您想要做的事情,您需要一个额外的步骤来询问 table 视图给定坐标下的行索引是什么。结果是可选的,如果点击没有落在任何行的顶部,则结果为 nil
。
获得正确结果的另一件事是使用 UIContextMenuInteraction
的 method 获取 table 视图坐标 space 内的坐标。
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
let locationInTableView = interaction.location(in: tableView)
guard let indexPath = tableView.indexPathForRow(at point: locationInTableView) else {
// clicked not on a row
return
}
let object = ds[indexPath.row]
...
}
}