斯威夫特 - 动态添加的动作并不会触发

时间:2016-06-12 13:04:34

标签: ios swift

我有一个应该"切换"通过在2张图像之间切换来显示条形按钮项目。

execute_array

我还有一个视图控制器类,其中有条形按钮项的动作。

class Buttons {
    func ToggleBarButton(button : UIBarButtonItem, name : String, location : BarButtonLocation, isEnabled : Bool, viewController : UIViewController) {
        var iconName = name
        if (!isEnabled) {
            iconName += "EnabledIcon"
        } else {
            iconName += "DisabledIcon"
        }

        let newIcon = UIImage(named: iconName)
        let newButton = UIBarButtonItem(image: newIcon, style: .Plain, target: self, action: button.action);

        switch location {
        case BarButtonLocation.Left:
            viewController.navigationItem.leftBarButtonItem = newButton;
            viewController.navigationItem.leftBarButtonItem?.tintColor = UIColor.blackColor();
        case BarButtonLocation.SecondLeft:
            viewController.navigationItem.leftBarButtonItems?[1] = newButton
            viewController.navigationItem.leftBarButtonItems?[1].tintColor = UIColor.blackColor()
        default:
            return;
        }
    }
}

首次按下它会成功将图像更改为启用的表单,但在第二次按下时它不会执行任何操作(按下事件甚至不会触发)。我查了一下,class GradesViewController: UIViewController { var isFilterEnabled = false var isViewEnabled = false override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } @IBAction func filterButton_Pressed(sender: UIBarButtonItem) { Buttons().ToggleBarButton(sender, name : "Filter", location: BarButtonLocation.Left, isEnabled: isFilterEnabled, viewController: self); isFilterEnabled = !isFilterEnabled; } @IBAction func viewButton_Pressed(sender: UIBarButtonItem) { Buttons().ToggleBarButton(sender, name : "View", location: BarButtonLocation.SecondLeft, isEnabled: isViewEnabled, viewController: self); isViewEnabled = !isViewEnabled; } } 被正确识别为button.action。问题是什么,或者有更简单的方法吗?谢谢你的回答。

2 个答案:

答案 0 :(得分:1)

在每个案例之后放置break语句并尝试。 并且还删除了半冒号。

答案 1 :(得分:0)

我刚刚意识到问题是我将代码从视图控制器复制到按钮类,并且没有将target: self更改为target: viewController。但是感谢所有的答案......