微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义 UIMenuController 使用按钮事件错误 只能有一个 UIMenuController 实例

如何解决自定义 UIMenuController 使用按钮事件错误 只能有一个 UIMenuController 实例

我创建了一个按钮,当您按住该按钮时,它会显示用于粘贴文本的标准 ios 菜单按钮,但是当我按住该按钮 2 次时出现错误提示 There can only be one UIMenuController instance.,我该如何解决这个?

这是我的代码

override init(frame: CGRect) {
    super.init(frame: frame)
    self.configureView()
}
    
required init?(coder: NSCoder) {
    super.init(coder: coder)
    self.configureView()
}

private func configureView() {
    guard let view = self.loadViewFromNib(nibName: "CustomView") else { return }
    view.frame = self.bounds
    self.addSubview(view)
        
    button.addTarget(self,action: #selector(holdButton),for: .touchDown)
}

@objc func holdButton(_ sender: UIButton) {
    let menuController = UIMenuController()
    menuController.setTargetRect(sender.frame,in: charTextField)
    menuController.setMenuVisible(true,animated: true)
}

另外,当用户点击 paste 按钮时,我如何听取用户的意见?

我希望它在他点击 paste调用这个函数

func pasteClick() {
    print("pasted",clipboardString())
}

解决方法

使用 .shared 提供的默认单例实例 (UIMenuController) 而不是创建您自己的实例。

@objc func holdButton(_ sender: UIButton) {
    UIMenuController.shared.setTargetRect(sender.frame,in: charTextField)
    UIMenuController.shared.setMenuVisible(true,animated: true)
}

引用自apple doc

单例 UIMenuController 实例称为编辑 菜单......

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。