我想要原生 iOS 复制并粘贴 UI 到 UI 标签

I want native iOS copy and paste UI on UILabel

我想创建 复制和粘贴 体验,当您点击并按住 UITextField 时 iOS 提供 - 但我希望它能正常工作在 UILabel 而不是 UITextField 上。

这可能吗,还是只适用于 UITextField? 我需要创建自己的自定义 UI 并在 UIPasteboard 中乱搞还是有更多 eloquent 解决方案?

这是一个典型的例子,虽然它通常也会显示放大的圆圈:

标签上的标准复制菜单很难做到。或者也许当时我尝试过但没有成功。所以我只是实现了一个完整的复制解决方案。我做了类似下面的事情:

import UIKit

class KGCopyableLabel: UILabel {
    
    override public var canBecomeFirstResponder: Bool {
        get {
            return true
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        isUserInteractionEnabled = true
        addGestureRecognizer(UILongPressGestureRecognizer(
            target: self,
            action: #selector(showCopyMenu(sender:))
        ))
    }

    override func copy(_ sender: Any?) {
        UIPasteboard.general.string = text
        UIMenuController.shared.hideMenu()
    }

    @objc func showCopyMenu(sender: Any?) {
        becomeFirstResponder()
        let menu = UIMenuController.shared
        if !menu.isMenuVisible {
            menu.showMenu(from: self, rect: bounds)
        }
    }

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        return (action == #selector(copy(_:)))
    }
}

然后您可以简单地将标签拖放到 Storyboard 中并设置其类型 KGCopyableLabel,它应该可以工作。