swiftでosxアプリ 〜 画像ファイルを表示する 〜

[swiftでosxアプリ 〜 プロジェクト作成〜何か出すとこまで 〜](http://qiita.com/tagosaku324/items/94fa337778b9799fc80f)
続き。　第2段
PCに保存されている画像を選択して表示させてみる。

# 画像ファイルを選択/表示するためのレイアウトを作る
1. ユーティリティエリア(右側)を表示。（青：表示）
2. Object libraryを選択。（青：選択）
3. [Button]を検索
4. [Push Button]部品を選択し、View Controllerにドラッグ
![スクリーンショット 2017-03-16 17.29.20.png](https://qiita-image-store.s3.amazonaws.com/0/39911/ffec3b3a-337c-d646-5c3e-7f278133fc45.png)
5. [Image]を検索
6. [Image View]部品を選択し、View Controllerにドラッグ。大きさを調節
![スクリーンショット 2017-03-16 17.38.09.png](https://qiita-image-store.s3.amazonaws.com/0/39911/13779ef4-95a4-4396-7b12-78ef252e1779.png)

# 配置部品とコードをつなぐ
1. コード(丸が重なっている絵のとこ)を表示。（青：表示）
2. [controlキー]を押しながら、コード側の「class ViewController:・・・」の下あたりに[Image View]をドラッグ。コード埋め込むだめのダイアログが出て来る
3. [Image View]は参照なので、[Connection]は[Outlet]にする。Nameがメソッドになるので重ならないように命名する。設定が終わればconnectを押すとコードが埋め込まれる。　
![スクリーンショット 2017-03-16 17.47.13.png](https://qiita-image-store.s3.amazonaws.com/0/39911/7cc56c74-78d6-1251-5adb-365d9f15aa46.png)
4. 同じように[controlキー]を押しながら、[Button]をコードにドラッグ。
5. [Button]を押した後に何かさせたいので[Connection]は[Action]にする。Nameを設定してconnectでメソッドが埋め込まれる。
6. 埋め込まれたメソッドにプログラムを書く
![スクリーンショット 2017-03-16 18.15.27.png](https://qiita-image-store.s3.amazonaws.com/0/39911/dfa2c6d6-16f4-3408-7136-672029872544.png)

##　部品とコードがつながれると
コードの左はじに丸ポチができます。
![スクリーンショット 2017-03-16 18.25.25.png](https://qiita-image-store.s3.amazonaws.com/0/39911/e5460790-aac2-ec6d-4e2a-974c1cbf1b2c.png)
これがどうつながれているのかを確認するのは、ユーティリティエリアを表示させ、丸矢印マークを表示させ、[Refarencing outlets]のエリアをみます。
メソッドがどこにつながっているかわかります。
![スクリーンショット 2017-03-16 18.32.14.png](https://qiita-image-store.s3.amazonaws.com/0/39911/5a8a92a8-2546-12c8-112f-972b7ad131eb.png)

# プログラムを書く
ボタンを押した後に動作する内容を埋め込まれたメソッドに書きます。

```:code
    @IBAction func BtnImgPath(_ sender: Any) {
        //print("push")
        let dialog = NSOpenPanel() //ファイルを開くダイアログ
        dialog.canChooseDirectories=false // ディレクトリを選択できるか
        dialog.canChooseFiles = true // ファイルを選択できるか
        dialog.canCreateDirectories = false // ディレクトリを作成できるか
        dialog.allowsMultipleSelection = false // 複数ファイルの選択を許すか
        dialog.allowedFileTypes = NSImage.imageTypes() // 選択できるファイル種別
        dialog.begin { (result) -> Void in
            if result == NSFileHandlingPanelOKButton {// ファイルを選択したか(OKを押したか)
                guard dialog.url != nil else { return }
                //log.info(url.absoluteString)
                // ここでファイルを読み込む
                self.screenImg.image = NSImage(contentsOf: dialog.url!)
            }
        }
    }
```

これで再生してみると
![スクリーンショット 2017-03-16 19.13.41.png](https://qiita-image-store.s3.amazonaws.com/0/39911/371ba4c6-a154-3897-e89c-06d8f0100549.png)
画像選択して
![スクリーンショット 2017-03-16 19.14.12.png](https://qiita-image-store.s3.amazonaws.com/0/39911/5d605412-7100-fd5b-a911-5083fc01a612.png)

表示できました。

参考
[【Xcode7】Swift2でMacアプリ開発。画像を読み込む為のボタンを作る。](http://original-game.com/swift2-load-image-button/)
[XcodeでCocoa, Swiftを勉強　〜ファイルを開くダイアログを知る〜](http://www.kilinbox.net/2015/03/xcodeswift3.html)

swift3だと上の参考URLのままのコードではエラーがでることがわかった。
ちょっと注意せねばいけない。

応用編で勉強したら面白いかもしれない。参考URL
[　[Swift] OSX でファイルを開く・保存するダイアログを開く](http://qiita.com/takecian/items/d31682899768f89a8d80)
[Swiftを使ったMac OS Xアプリの開発【Data Road偏】](http://qiita.com/AkkeyLab/items/059e7223434270266c3d)
[Swiftのサンプルコードがさっぱり動かない(NSOpenPanel)　[プログラミング]
](http://miff.blog.so-net.ne.jp/2017-02-08-2)