'CustomButton'类型的值没有成员'touchDown'

问题描述:

我已创建自定义按钮类并覆盖所有触摸方法。它适用于swift 2Xcode 7.3.1。但是,当我在Xcode 8.0打开相同的应用程序,它会显示错误:'CustomButton'类型的值没有成员'touchDown'

类型的值“的CustomButton”没有成员“着陆”

类型的值“的CustomButton”没有成员“touchUpInside”

值类型“的CustomButton”的没有成员“touchDragExit”

类型的值“的CustomButton”没有成员“touchDragEnter”

类型自定义的“价值按钮”没有成员‘touchCancel’

这里是我的代码:

import UIKit 

@IBDesignable 
@objc public class CustomButton: UIButton { 

    private func addTargets() { 

     //------ add target ------- 

     self.addTarget(self, action: #selector(self.touchDown(_:)), for: UIControlEvents.TouchDown) 
     self.addTarget(self, action: #selector(self.touchUpInside(_:)), for: UIControlEvents.TouchUpInside) 
     self.addTarget(self, action: #selector(self.touchDragExit(_:)), for: UIControlEvents.TouchDragExit) 
     self.addTarget(self, action: #selector(self.touchDragEnter(_:)), for: UIControlEvents.TouchDragEnter) 
     self.addTarget(self, action: #selector(self.touchCancel(_:)), for: UIControlEvents.TouchCancel) 
    } 

    func touchDown(sender: CustomButton) { 
     self.layer.opacity = 0.4 
    } 

    func touchUpInside(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 

    func touchDragExit(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 

    func touchDragEnter(sender: CustomButton) { 
     self.layer.opacity = 0.4 
    } 

    func touchCancel(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 
} 

如果任何人有任何解决方案,请让我知道。

如果你想保持你的方法标头,在你的代码,您需要更改选择引用#selector(touchDown(sender:)),等等。

(一般情况下,你没有必要前缀self.。)

记住所有的函数和方法现在有他们的第一个参数一致的标签处理。 SE-0046

(您可能会发现很多好文章,以“swift3选择”搜索)

如果你想保留选择的参考,您需要更改,如方法:

func touchDown(_ sender: CustomButton) { 

另外,如果你的班级只有一个touchDown(...)方法,#selector(touchDown)会起作用。

+0

感谢....它的工作原理... – VRAwesome

我发现解决方案为@OOPer建议,但也需要在小型情况下更改UIControlEvents。在Xcode 7.3.1这是UIControlEvents.TouchDown,但现在它必须是UIControlEvents.touchDown

它会像:

self.addTarget(self, action: #selector(touchDown(sender:)), for: UIControlEvents.touchDown) 
self.addTarget(self, action: #selector(touchUpInside(sender:)), for: UIControlEvents.touchUpInside) 
self.addTarget(self, action: #selector(touchDragExit(sender:)), for: UIControlEvents.touchDragExit) 
self.addTarget(self, action: #selector(touchDragEnter(sender:)), for: UIControlEvents.touchDragEnter) 
self.addTarget(self, action: #selector(touchCancel(sender:)), for: UIControlEvents.touchCancel)