クリアメモリ

プログラミングやモーショングラフィックス、便利なアプリケーションなど雑多に記録するブログ

【Swift】複数ボタンのアクションをまとめて設定する方法

f:id:clrmemory:20170422184557p:plain 

Xcodeで、ストーリーボードからボタンを配置してコードにアクション接続をした時に、そのボタンが複数あった場合はひとまとめにしておきたいですよね。

そこで今回は、複数ボタンのアクション接続をまとめて設定する方法を紹介します。

 

 

はじめに

 

今回紹介する方法はSwiftを使用して記述しています。また、実装はCocoaで確認しており、Xcodeを使用しているので注意してください。

 

以下のように複数ボタンが存在しており、そのどれもが「背景の色を変更する」という内容のコードだった場合、ひとまとめにして設定することができます。

例にあげるとこのような感じですね。もちろんこれ以外の実装方法はあると思いますが、今回はこのようなアプリケーションをもとに解説していこうと思います。

 

ではまず、複数ボタンが存在するストーリーボードから作成してみましょう。

 

ストーリーボードを作成する

 

先ほど紹介した通り、今回のストーリーボードに配置するオブジェクトは「ボタン」です。必ずしも同じようにする必要はありませんが、複数のアクションをまとめるので2つ以上のオブジェクトを設置しましょう。

 

またこれらのボタンはViewの背景色を変更するアクションを実装するので、ボタンのタイトルに変更する色に変更しておきました。

 

 

ストーリーボードはこれだけで大丈夫です。

 

アクションをまとめる

 

ここでいう「アクション」というのは、Xcode上でオブジェクトとswiftファイルをセグエで接続した時の「IBAction」です。

オブジェクトを右クリックしながら (controlを押しながら) コードに設定すると表示されるウィンドウから、ConnectionをActionに変更すると設定できるやつですね。

 

 

通常これを設置すると以下のような記述が追加されると思います。

 

@IBAction func pushButton(_ sender: Any) { }

 

ここで、アクション接続の型を変更しておく必要があります。今回の場合、接続するオブジェクトの型は「NSButton型」なので、以下のように変更しましょう。

 

@IBAction func pushButton(_ sender: NSButton) { }

 

このアクションの中での動作が同一のものだった場合、ボタンごとにアクション接続を記述する必要はなくひとまとめにできるので、以下から実際の方法を確認してください。

 

実は、これらの型が同じだった場合、すでに作成されているアクションに別のボタンから再度接続することで、アクション接続するオブジェクトを追加することができます。

言葉では説明が難しいのですが、以下手順で行ってみてください。

 

greenを接続:

blueを接続:

yellowを接続:

 

これで接続が完了したので、最後に接続されたオブジェクトを確認してみましょう。

 

 

このように一つのアクションから、複数のオブジェクトがハイライトされていれば、まとめて接続できているということになりますね。

あとは、この中に処理を記述していってください。

 

まとめ

 

今回紹介した方法を使うことで、同一の動作を持つ複数のオブジェクトをまとめてアクション接続することができました。

今回作成したアプリケーションは、背景の色を変更させるものだったので、サンプルコードを載せておきます。

 

import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

    @IBAction func pushButton(_ sender: NSButton) {

        switch sender.title {
        case "red":
            self.view.window?.backgroundColor = NSColor.red
            break
        case "green":
            self.view.window?.backgroundColor = NSColor.green
            break
        case "blue":
            self.view.window?.backgroundColor = NSColor.blue
            break
        case "yellow":
            self.view.window?.backgroundColor = NSColor.yellow
            break
        default :
            self.view.window?.backgroundColor = NSColor.clear
            break
        }
    }
}

 

簡潔にまとめられていて、コードがすっきりしているかと思います。

ぜひ参考にしてみてください。

ではまた。

新着記事