我想要原生 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
,它应该可以工作。
我想创建 复制和粘贴 体验,当您点击并按住 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
,它应该可以工作。