iOS
UITapGestureRecognizer
Swift

【Swift4】タップでラベルのテキストをクリップボードへ【iOS】

不可視ボタンを乗せたり、touchesEndedをオーバーライドする手もありますが、タップジェスチャーがおすすめです。
 

不可視ボタン => ラベルオブジェクトのサイズが可変な場合は制約を同じにする必要がある
touchesEnded => タップされたオブジェクトの判別ロジックが必要

コードから

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tapLabel:UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        tapLabel.text = "please tap here"
        tapLabel.isUserInteractionEnabled = true

        let tg = UITapGestureRecognizer(target: self, action: #selector(ViewController.tappedLabel(_:)))
        tapLabel.addGestureRecognizer(tg)
    }

    @objc func tappedLabel(_ sender:UITapGestureRecognizer) {
        UIPasteboard.general.string = tapLabel.text
        print("clip board :\(UIPasteboard.general.string!)")
    }

}

ストーリーボードで

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tapLabel:UILabel!
    @IBAction func tapAction(_ sender: UITapGestureRecognizer) {
        UIPasteboard.general.string = tapLabel.text
        print("clip board :\(UIPasteboard.general.string!)")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        tapLabel.text = "please tap here"
        tapLabel.isUserInteractionEnabled = true
    }  
}  

 

テキストを扱う場合、setValue()ではなく、stringプロパティを使うこと
// iOS11では動作しない
UIPasteboard.general.setValue("source string", forPasteboardType: "public.text")

// これならOK
UIPasteboard.general.string = "source string"