ココロミにきみ

本と体とプログラミング

UIView上でやりたいことをViewControllerへ任せる(delegateする)

(目的)UIView上でやりたいことを、ViewControllerに任せる(delegateする)

(例)UIView上のボタンで音を鳴らしたいときに、既にViewControllerに定義してあった音を鳴らすfuncを使って代替しようと考えた

(以下code : 2019/08/30現在)

// ①プロトコルを作り、橋渡しするfunc名を定義

protocol MyDelegate:class {

    func myDelegateAction()

}

 

// storyBoard上にmyUIView = MyUIView()としてインスタンスがあるとする

class MyUIView:UIView {

    

    // ②delegate(代理)をお願いする人は私ですと宣言

    weak var delegate:MyDelegate? = nil

    

    // UIViewに紐付けされているボタン

    @IBAction func buttonPressed(_ sender: Any) {

        // ⑥delegate先にお任せする指示

        self.delegate?.myDelegateAction()

    }

}

 

// ③プロトコルを批准して、代理を宣言

class ViewController:UIViewController, MyDelegate {

    

    func samplePlaySound() {

        ...doSomething...

    }

    override func viewDidLoad() {

        super.viewDidLoad()

        // ④myUIViewのdelegate(代理人)はself(私)ですと宣言

        myUIView.delegate = self

    }

    

    // ⑤UIViewでやりたいfuncをここで代替する

    func myDelegateAction() {

        // 音を鳴らす、データの保存UIB、ViewControllerで定義している関数の実行とか

        samplePlaySound()

    }

}