(目的)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()
}
}