У меня есть UICollectionView
, в котором я показываю пользовательские UICollectionViewCell
с. Когда пользователь касается и удерживает ячейку, должно быть представлено меню.
Я реализовал это с помощью следующего кода, скопированного из ответа StackOverflow .
extension CustomCollectionViewCell {
@objc
func customMenuAction() {
print("customMenuAction")
}
extension CategoriesViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, shouldShowMenuForItemAt indexPath: IndexPath) -> Bool {
let deleteItem = UIMenuItem(title: "Custom Menu Action", action: #selector(CustomCollectionViewCell.customMenuAction))
UIMenuController.shared.menuItems = [deleteItem]
return true
}
func collectionView(
_ collectionView: UICollectionView,
canPerformAction action: Selector,
forItemAt indexPath: IndexPath,
withSender sender: Any?
) -> Bool {
action == #selector(CustomCollectionViewCell.customMenuAction)
}
func collectionView(
_ collectionView: UICollectionView,
performAction action: Selector,
forItemAt indexPath: IndexPath,
withSender sender: Any?
) {
print("performAction", indexPath)
}
}
Если код выполняется и пользователь долго нажимает на ячейку, меню, содержащее элемент пользовательского меню, отображается, как и ожидалось.
Если пользователь выбирает элемент пользовательского меню, функция customMenuAction
ячейка вызывается.
Однако метод делегата collectionView(_:performAction:forItemAt:withSender:)
никогда не вызывается. Кто-нибудь может указать, когда вызывается метод collectionView(_:performAction:forItemAt:withSender:)
?