LoginSignup
6
5

More than 3 years have passed since last update.

【swift】 ラベルをタップして内容をクリップボードにコピー

Last updated at Posted at 2019-06-25

前置き

昨日のエントリの続きで、ジオコーディング(住所→緯度・経度変換)のソースコードを確認するためのアプリを作ったんですが、変換結果の緯度・経度が意図した座標を指しているか確認するための第一段階として、タイトル通り「ラベルをタップして内容をクリップボードにコピー」して、GoogleMapなり、ブラウザなりにペーストできるようにしました。

開発環境

端末:MacBook Pro/MacOS 10.14.5(Mojave)
Xcode:10.2.1
Swift:5

画面イメージ

"PUSH ME!!"を押してジオコーディング
タップ→ペーストで緯度・経度コピーを確認
GoogleMapでみるとスカイツリーを指している

ソースイメージ

少し画面イメージとギャップがありますが、
「緯度」の値をタップしてクリップボードにコピーする処理を抽出すると
下記のようになりました。

ViewController.swift
class ViewController: UIViewController {
    // 緯度の部分をタップすると緯度経度を取得する
    @IBOutlet weak var lblLat: UILabel!
    let myTGLat = UITapGestureRecognizer()

    override func viewDidLoad() {
        super.viewDidLoad()

        // タップを検知できるようにして、
        // その際に行う動作を定義する
        lblLat.isUserInteractionEnabled = true
        myTGLat.addTarget(self, action: #selector(tapLblLat(_:)))
        lblLat.addGestureRecognizer(myTGLat)

        // 以下、何かしらの処理をして、
        // 緯度に表示させたい値を取得、セット
    }

    // 緯度を表示するラベルをタップした際に呼ばれる処理
    @objc func tapLblLat(_ sender:UITapGestureRecognizer) {
        // lblLatに表示された値をクリップボードにコピー
        UIPasteboard.general.string = lblLat.text!

        // ※UIPasteboard.general.setValue では、
        // iOS11では動かないらしい。
    }
}

早めにアウトプットしたいので、一部抽出したロジックになりましたが、実際組んだモノのロジックがもう少し整理できたらちゃんと書き直したいと思います。

ハマったポイントなど

今回はサンプルが充実していたコトもあって、ハマったトコはありませんでした。
しいて言えば、何度ラベル部分をタップしてもデバッグ用に入れていたログ出力処理が動かず、結果XXX.isUserInteractionEnabled = trueを入れ忘れていたのが原因だった、くらいです。

これから

ジオコーディング結果を別画面で表示した地図上にピンを立てるところまでは発展させたいなぁ、と。
あと、ジオコーディングのところをQiitaのエントリとしてアウトプットできていないので、その部分はまた改めて。(info.plistの設定やら、注意点が多いから忘れないようにしたい。)

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5