Posted at

長押しでコピー可能なUIButton

More than 1 year has passed since last update.

毎回作るのが嫌なので、クラスを貼っておく。

これをコピペして、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
}
}
}