5
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

前置き

昨日のエントリの続きで、ジオコーディング(住所→緯度・経度変換)のソースコードを確認するためのアプリを作ったんですが、変換結果の緯度・経度が意図した座標を指しているか確認するための第一段階として、タイトル通り「ラベルをタップして内容をクリップボードにコピー」して、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の設定やら、注意点が多いから忘れないようにしたい。)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
5
Help us understand the problem. What are the problem?