如何在UIMenu中添加粘贴按钮,以防止系统弹出“允许应用粘贴”的提示
尝试访问剪贴板内容的应用会弹出系统提示,询问用户是否允许。
「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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。