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

时间:2015-11-22 03:02:34

标签: swift

我不认为缺乏调用的原因是我在扩展中这样做,但我想不出为什么这不起作用的任何其他原因:

扩展:

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并在扩展中声明操作时,它可以正常工作。

任何帮助将不胜感激!

我在初始viewcontroller中调用该函数

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

}

1 个答案:

答案 0 :(得分:0)

变量add_action( 'edit_user_profile', 'my_show_extra_profile_fields' ); function my_show_extra_profile_fields( $user ) { } 的生命周期仅限于创建它的函数test的范围。该方法返回后,function超出范围并被取消分配,因此以后控制事件不会发送操作。 (换句话说,test不会保留目标。)

您需要找到一种方法让addTarget(_:action:forControlEvents:)在函数之外保持不变。但是,您无法在类扩展中添加存储的属性,因此您必须以另一种方式执行此操作。也许是一个计算属性,其访问器读/写全局?

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