Когда вызывается метод `collectionView (_: executeAction: forItemAt: withSender:)` после отображения UIMenuController? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть 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:)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...