关闭 UIMenuElement Swift 的委托

Dismiss delegate for UIMenuElement Swift

我的应用程序上有一个 UIMenu,我想检测用户何时在 UIMenu 外部点击(关闭)。但似乎 Apple 默认不支持此操作的任何委托。 因为当用户在外面点击时,我想更改按钮的图像。 Sample Image

我发现的一种相当老套的方法是继承 UIButton 并覆盖 contextMenuInteractionWillEndFor.

class MyButton: UIButton {
    override func contextMenuInteraction(_ interaction: UIContextMenuInteraction, willEndFor configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionAnimating?) {
        super.contextMenuInteraction(interaction, willEndFor: configuration, animator: animator)
        print("ending!")
    }
}

contextMenuInteractionWillEndFor 是当您关闭 UIMenu 时调用的委托方法,但是如果您正在设置按钮的 menu 属性,按钮本身将变为UIContextMenuInteraction 的代表,你不能将它设置为其他东西,这就是为什么你必须继承 UIButton.

将此与使用 addInteraction 添加上下文菜单时进行比较,您可以控制 UIContextMenuInteractionDelegate