概要
例えば、TextViewの変更を検知して、Viewの色を変えるという独自拡張Viewがあったとする。
class UIChangeColorTextView: UITextView { override init(frame: CGRect) { delegate = self } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } } extension UIChangeColorTextView: UITextViewDelegate { func textViewDidChange(_ textView: UITextView) { titleTextView.layer.borderColor = UIColor.red.cgColor } }
で、この時、このViewを使用するViewControllerでも色の変更処理をしつつ新たにtextViewDidChangeに追加処理を記述したい場合。
ViewController
独自拡張Viewのインスタンスからdelegateメソッドにアクセスできる。superだとViewControllerの親クラスになってしまうので注意。
class ViewController: UIViewController { var textView = UIChangeColorTextView() textView.delegate = self } extension ViewController: UITextViewDelegate{ func textViewDidChange(_ textView: UITextView) { //これで独自拡張のdelegateメソッドを呼び出せる self.textView.textViewDidChange(textView) //...追加処理を記述 } }
リンク
リンク