'CustomButton'类型的值没有成员'touchDown'
问题描述:
我已创建自定义按钮类并覆盖所有触摸方法。它适用于swift 2
和Xcode 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)
会起作用。
答
我发现解决方案为@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)
感谢....它的工作原理... – VRAwesome