gpt4 book ai didi

ios - 扩展 UITextView 并触发 onChange 事件的委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 12:02:03 30 4
gpt4 key购买 nike

此代码有效并触发:

class ViewControllerDisplay: UIViewController, UITextViewDelegate {
//.....

let textView = MyUITextView(frame: CGRect(x:10, y:20, width:270, height:65))
textView.params["dataname"] = _dataname
textView.delegate = self
view.addSubview(textView)

func textViewDidChange(_ textView: UITextView) {
print("YAAAA" + textView.text);
}

但是这不会触发

  func textViewDidChange(_ textView: MyUITextView) {
print("YAAAA" + textView.text);
}

这是MyUITextView代码

import UIKit
class MyUITextView: UITextView{
var params: Dictionary<String, Any>
required init?(coder aDecoder: NSCoder) {
self.params = [:]
super.init(coder: aDecoder)
}
init(frame: CGRect) {
self.params = [:]
super.init(frame: frame, textContainer: nil)
}
}

那么如何扩展委托(delegate)以将 MyUITextView 包含在委托(delegate)“onChange”中

最佳答案

未调用方法 textViewDidChange (textView: MyUITextView),因为在协议(protocol) UITextViewDelegate 中该方法被指定为 func textViewDidChange ( textView: UITextView)

如果你需要专门从自定义类MyUITextView调用,你需要为这个类编写一个协议(protocol),比如:

protocol MyUITextViewDelegate {
func myTextViewDidChange(_ textView: MyUITextView)
}

添加类型为 MyUITextViewDelegate 的字段?在 MyUITextView 类中:

var myDelegate: MyUITextViewDelegate?

例如在 ViewControllerDisplay 类的 viewDidLoad 类中初始化它:

override func viewDidLoad() {
super.viewDidLoad()
...
textView.myDelegate = self
...
}

类MyUITextView需要订阅UITextViewDelegate协议(protocol)并实现textViewDidChange(_textView: UITextView)方法,其中我们的协议(protocol)从myDelegate调用(如果存在):

class MyUITextView: UITextView, UITextViewDelegate {
...
func someInitMethod() {
delegate = self
}
...
func textViewDidChange(_ textView: UITextView) {
myDelegate?.myTextViewDidChange(self)
}
}

最后,通过在协议(protocol) MyUITextViewDelegate 上签署 ViewControllerDisplay 类并实现必要的方法:

class ViewControllerDisplay: UIViewController, MyUITextViewDelegate {
...
func textViewDidChange(_ textView: MyUITextView) {
print("YAAAA" + textView.text);
}
}

关于ios - 扩展 UITextView 并触发 onChange 事件的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47096088/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com