我想创建iOS点击并按住UITextField
时提供的原生复制和粘贴体验 - 但我希望它能够在UILabel
而不是UITextField
上工作一个UITextField
。
这是可能的,还是仅适用于UIPasteboard
的东西?
我是否需要创建自己的自定义用户界面并在this.router.navigate(['info'], {relativeTo: this.route})
中乱七八糟,还是有更有说服力的解决方案?
这是一个典型的例子,虽然它通常也会显示放大的圆圈:
答案 0 :(得分:6)
很难在标签上进行标准复印菜单。或者也许当时我试过但没有成功。所以我刚刚实施了完整的复制解决方案。我做了类似下面的事情 -
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.setMenuVisible(false, animated: true)
}
func showCopyMenu(sender: Any?) {
becomeFirstResponder()
let menu = UIMenuController.shared
if !menu.isMenuVisible {
menu.setTargetRect(bounds, in: self)
menu.setMenuVisible(true, animated: true)
}
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return (action == #selector(copy(_:)))
}
}
然后,您可以简单地拖放Storyboard中的Label并使其类型为 KGCopyableLabel ,它应该可以正常工作