如何在UIMenu中添加粘贴按钮,以防止系统弹出“允许应用粘贴”的提示

移动开发 2026-07-10

尝试访问剪贴板内容的应用会弹出系统提示,询问用户是否允许。

「AppName」想要从「OtherAppName」粘贴

你要允许吗?

不允许粘贴

允许粘贴

此提示在实现UIPasteControl并且用户点击它以表示粘贴意图时不会出现,但该控件不能被放入UIMenu。我听说这可以通过 UIAction.Identifiers,如.paste或 .newFromPasteboard来实现,但以下代码中提示仍然会出现。到底有什么窍门?

override func viewDidLoad() {
    super.viewDidLoad()

    title = "TestPaste"
    view.backgroundColor = .systemBackground

    let imageView = UIImageView()
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.contentMode = .scaleAspectFit
    imageView.clipsToBounds = true
    view.addSubview(imageView)
    NSLayoutConstraint.activate([
        imageView.topAnchor.constraint(equalTo: view.topAnchor),
        imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
    ])

    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", image: UIImage(systemName: "plus"), menu: UIMenu(children: [
        UIAction(identifier: .paste) { _ in
            imageView.image = UIPasteboard.general.image
        }
    ]))
}

解决方案

创建一个带有 .paste.newFromPasteboard 标识符的 UIAction,在用户点击菜单中的该操作时,将抑制系统提示。它不会在其他场景下被抑制,例如用户长按按钮以打开菜单、向上滑动到该操作后再释放以激活它。这一点在 Apple Developer Forums 的一位DTS工程师那里有提及,我也在使用iOS 26.5的情况下予以证实。题中的代码也体现了这种行为。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章