gpt4 book ai didi

ios - 未调用自定义 UITextViewDelegate/UITextFieldDelegate

转载 作者:可可西里 更新时间:2023-11-01 01:26:44 24 4
gpt4 key购买 nike

正在尝试为 UITextViewDelegateUITextFieldDelegate 创建自定义委托(delegate)类。当我将这些类设置为它们自己的委托(delegate)时,或将另一个 UIKit 组件设置为它们的委托(delegate)时,一切正常。但是,如果我创建自己的类作为委托(delegate),则永远不会调用委托(delegate)方法。为什么?

这个有效:

class MyTextView: UITextView, UITextViewDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self
}

func textViewDidChange(_ textView: UITextView) {
print("I work")
}

这不会:

class MyTextView: UITextView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = MyDelegate()
}

class MyDelegate: NSObject, UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
print("I work")
}
}

注意:如果MyDelegate 不是NSObject 的子类,则会抛出以下错误:

///类型“MyDelegate”不符合协议(protocol)“NSObjectProtocol”

最佳答案

当您在第二种情况下设置文本字段委托(delegate)时,您正在创建 MyDelegate() 类的弱引用。您可以检查以下代码,这将通过创建 MyDelegate() 的强引用来解决您的问题。

class MyTextView: UITextView {
var responseDelegate = MyDelegate()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = responseDelegate
}
}
class MyDelegate: NSObject, UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
print("I work")
}
}

关于ios - 未调用自定义 UITextViewDelegate/UITextFieldDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253656/

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