gpt4 book ai didi

ios - 我可以将委托(delegate)链接在一起吗?

转载 作者:行者123 更新时间:2023-11-28 14:55:15 24 4
gpt4 key购买 nike

swift 4.0 iOS 11.x

我创建了一个简单的文本字段类,它使用 UITextFieldDelegate。我想向它添加一个附加协议(protocol),我可以用它来传递一个事实,即对所述字段的文本输入已完成。委托(delegate)链,因为一旦我发现自定义类中的文本输入已退出,我就无法将其传递给 UITextField 类所在的 VC。

import UIKit

protocol ExitedFieldDelegate {
func exited(info: String)
}

class IDText: UITextField, UITextFieldDelegate {

internal var zeus: ExitedFieldDelegate? = nil

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
delegate = self
}

required override init(frame: CGRect) {
super.init(frame: frame)
delegate = self
}

func textFieldDidBeginEditing(_ textField: UITextField) {
self.textColor = UIColor.black
}

func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {
if (delegate != nil) {
let info = self.text
zeus?.exited(info: info!)
}
}

}

我将此代码添加到我想在其中使用我的自定义类的 viewController。

class ConfigViewController: UIViewController, ExitedFieldDelegate 

当然还有协议(protocol)要求的方法

func exited(info: String) {
print("The brain has left the room")
}

我让它成为上述协议(protocol)的委托(delegate),所以我得到了它

var blah = IDText()
blah.delegate = self

但是它不起作用。我在这里尝试不可能的事情,我应该只使用默认通知吗?还是别的什么?

最佳答案

通过设置:

blah.delegate = self

您正在覆盖初始化器中将委托(delegate)设置为 self

你想要的是重写:

internal var zeus: ExitedFieldDelegate? = nil

到:

weak var zeus: ExitedFieldDelegate?

为了能够使用weak(你希望它能防止保留循环),将协议(protocol)定义更新为:

protocol ExitedFieldDelegate: class {
func exited(info: String)
}

然后改变这个:

var blah = IDText()
blah.delegate = self

到:

var blah = IDText()
// you want to set zeus instead of the delegate field
blah.zeus = self

关于ios - 我可以将委托(delegate)链接在一起吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49448426/

24 4 0
文章推荐: javascript - 在 Sylius 中使用 Ajax 添加到购物车
文章推荐: javascript - $scope.$watch 的工作原理
文章推荐: css - 居中 block 菜单 `
  • ` 元素在 `
    `
  • Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com