使用touchesBegan操作对UIBarButtonItem进行子类化

时间:2014-09-05 06:13:38

标签: ios iphone cocoa-touch swift uibarbuttonitem

我试图创建一个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()");
    }
}

3 个答案:

答案 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)