gpt4 book ai didi

swift - 为什么 addTarget 不在扩展中调用我的目标的操作

转载 作者:行者123 更新时间:2023-11-30 13:54:15 26 4
gpt4 key购买 nike

我不认为缺少调用的原因是我在扩展中执行此操作,但我想不出任何其他原因导致此功能不起作用:

扩展名:

extension UIControl
{
func function(controlEvent: UIControlEvents)
{
let test = Test()
addTarget(test, action: Selector("update"), forControlEvents: controlEvent)
}
}

类别

class Test
{
func update()//(input: U)
{
print("worl")
}
}

当我将目标设置为 self 并在扩展中声明操作时,它工作正常。

如有任何帮助,我们将不胜感激!

我正在初始 View Controller 中调用该函数

override func viewDidLoad() {
let tf = UITextField(frame: CGRectMake(0, 0, 100, 100))
view.addSubview(tf)
tf.function(.AllEditingEvents)

}

最佳答案

变量 test 的生命周期仅限于创建它的函数 function 的范围。该方法返回后,test 超出范围并被释放,因此稍后的控制事件将不再向其发送操作。 (换句话说,addTarget(_:action:forControlEvents:) 不会保留目标。)

您需要找到一种方法使 test 在函数之外持续存在。但是,您无法在类扩展中添加存储的属性,因此您必须采用另一种方式。也许是一个计算属性,其访问器读取/写入全局内容?

此外,这可能不是问题的一部分,但为了安全起见:目标/操作选择器应该有一个参数(发送操作的控件),因此您的 update() 方法应为 update(sender: AnyObject),其选择器应为 update:

关于swift - 为什么 addTarget 不在扩展中调用我的目标的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851171/

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