我不认为缺乏调用的原因是我在扩展中这样做,但我想不出为什么这不起作用的任何其他原因:
扩展:
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)
}
答案 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)
。