【发布时间】:2021-08-10 14:04:56
【问题描述】:
我有一个自定义的UITextView,它本身包含一个内部私有委托。
import UIKit
class CustomTextView: UITextView {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.delegate = self
}
}
extension CustomTextView: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
print("CustomTextView delegate textViewDidChange (Performing operation like setNeedsDisplay to implement custom drawing)")
}
}
但是,如果我开始应用这个CustomTextView,并应用一个外部委托,它将被破坏,因为它的初始内部委托将不会被执行。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var customTextView: CustomTextView!
override func viewDidLoad() {
super.viewDidLoad()
customTextView.delegate = self
}
}
extension ViewController: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
print("ViewController delegate textViewDidChange")
}
}
如果我们执行上面的代码,只有
ViewController delegate textViewDidChange
将被打印出来。
我想知道,有什么好的设计可以确保支持多个代表,以便将两者都打印出来?
CustomTextView delegate textViewDidChange (Performing operation like setNeedsDisplay to implement custom drawing)
ViewController delegate textViewDidChange
谢谢。
【问题讨论】:
-
嗯。也许您可以保留内部委托并在方法内部调用回调。然后,当您需要使用外部委托时,您可以从 callbak 访问它。
-
您需要一个外部委托属性,而您的内部委托必须将调用转发给它。
标签: ios swift uitextview