我试图创建一个UIBarButtonItem
的子类,我可以在Storyboards / Xibs中使用,可以听到 touchesBegan 操作(播放按钮声音正确触摸按钮)。这就是我得到的:
class UIAudibleBarButtonItem : UIBarButtonItem {
override init() {
super.init()
target = self
action = "touchesBegan:"
}
required init(coder aDecoder:NSCoder) {
super.init(coder: aDecoder)
}
func touchesBegan(touches:NSSet, withEvent event:UIEvent) {
AudioManager.instance.playButtonSound()
}
}
然而它不起作用,即没有调用touchesBegan。我需要做些什么才能使其发挥作用?
更新:
class UIAudibleBarButtonItem : UIBarButtonItem {
override init() {
super.init();
setup();
}
override init(barButtonSystemItem systemItem: UIBarButtonSystemItem, target: AnyObject?, action: Selector) {
super.init(barButtonSystemItem: systemItem, target: target, action: action);
setup();
}
override init(image: UIImage?, landscapeImagePhone: UIImage?, style: UIBarButtonItemStyle, target: AnyObject?, action: Selector) {
super.init(image: image, landscapeImagePhone: landscapeImagePhone, style: style, target: target, action: action);
setup();
}
override init(image: UIImage?, style: UIBarButtonItemStyle, target: AnyObject?, action: Selector) {
super.init(image: image, style: style, target: target, action: action);
setup();
}
override init(title: String?, style: UIBarButtonItemStyle, target: AnyObject?, action: Selector) {
super.init(title: title, style: style, target: target, action: action);
setup();
}
override init(customView:UIView) {
super.init(customView: customView);
setup();
}
required init(coder aDecoder:NSCoder) {
super.init(coder: aDecoder);
setup();
}
private func setup()
{
target = self;
action = "buttonPressed:";
println("setup()");
}
func buttonPressed(sender:AnyObject)
{
AudioManager.instance.playButtonSound();
println("buttonPressed()");
}
}
答案 0 :(得分:1)
如果你在这里使用swift是一种简单的方法来检测下面的动作。您所要做的就是在故事板中连接该类,单击您的栏按钮项,您将看到动作火。
稍后谢谢!!!
class MVBarbuttonItem: UIBarButtonItem {
override func awakeFromNib() {
self.action = #selector(MVBarbuttonItem.didTapButton)
}
@objc func didTapButton() {
}
}
答案 1 :(得分:0)
我假设您将UIAudibleBarButtonItem
作为情节提要中的自定义类,而不是将此行放在您的类@objc(UIAudibleBarButtonItem)
上方,然后看是否可行。
这对我有用。
答案 2 :(得分:-1)
UIBarButtonItem
不是UIView
。
如果您想要达到这样的效果,请创建一个按钮,聆听触摸该按钮(使用addTarget:...
或touchesBegan
)并使用initWithCustomView
创建条形图该按钮的按钮项目。
编辑:
根据应该播放的确切时间,还有另一种可能性。如果您想在按下并释放后播放声音,只需将上述代码修改为:
action = "buttonPressed:"
...
func buttonPressed(sender:AnyObject)