毎回作るのが嫌なので、クラスを貼っておく。
これをコピペして、nibのボタンのクラスをUIButton
からUIButtonWithCopyMenu
に変更すると長押しでCopyメニューが表示されます。
import UIKit
// コピーメニューが表示されるUIButton
class UIButtonWithCopyMenu: UIButton {
override func awakeFromNib() {
// 長押し処理を追加
self.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(UIButtonWithCopyMenu.showContextMenu(_:))))
}
// コンテンツをコピーできるようにします。
func showContextMenu(_ sender:AnyObject?) {
self.becomeFirstResponder()
let contextMenu = UIMenuController.shared
if !contextMenu.isMenuVisible {
contextMenu.setTargetRect(self.bounds, in: self)
contextMenu.setMenuVisible(true, animated: true)
}
}
// コンテンツをコピーします。
override func copy(_ sender: Any?) {
let pasteBoard = UIPasteboard.general
pasteBoard.string = self.titleLabel?.text
let contextMenu = UIMenuController.shared
contextMenu.setMenuVisible(false, animated: true)
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(copy(_:)) {
return true
}
return false
}
override var canBecomeFirstResponder: Bool {
get {
return true
}
}
}