Swift - UIToolbar项目选择状态

时间:2016-07-18 22:33:11

标签: ios swift uitoolbar

我的导航控制器中有这个工具栏。现在我要做的是当用户在我的工具栏中选择一个项目(UIBarButtonItem)时,用背景颜色突出显示该项目,直到用户取消选择该项目或选择另一个项目。我该怎么做?

以下是我的工具栏每个项目的选择器方法,我通过故事板连接它们:

@IBAction func addText(sender: AnyObject) {
        annotationSelected = 3
}

@IBAction func drawCircle(sender: AnyObject) {
    annotationSelected = 1
}

@IBAction func drawRectangle(sender: AnyObject) {
    annotationSelected = 2
}

@IBAction func drawStamp(sender: AnyObject) {
    annotationSelected = 4
}

这就是我所做的一切。这是我的工具栏的截图:

enter image description here

这是我得到的:

@IBOutlet var textToolButton: UIBarButtonItem!

    @IBOutlet var circleToolButton: UIBarButtonItem!

    @IBOutlet var rectangleToolButton: UIBarButtonItem!

    @IBOutlet var stampToolButton: UIBarButtonItem!

然后

textToolButton.target = self
        textToolButton.style = .Done
        textToolButton.action = #selector(ViewController.barButtonPressed)

        let selectedBackgroundColor = UIImage(color: .redColor())

        textToolButton.setBackgroundImage(selectedBackgroundColor, forState: UIControlState.Highlighted, style: .Done, barMetrics: UIBarMetrics.Default)

然后是方法

func barButtonPressed(sender: UIBarButtonItem) {

        print(sender)
        annotationSelected = sender.tag
    }

背景仍未改变颜色

2 个答案:

答案 0 :(得分:2)

您可以做到的最干净的方法是创建一个整体功能,您可以在其中传递已选择的按钮。像这样:

    var allButtons = [button1, button2, button3, button4]

    func resetTabBar (buttonSelected:UIButton) {
        for button in allButtons {
            if button == buttonSelected {
                button.backgroundColor = "Black"
            }
            else {
                button.backgroundColor = "Blue"
            }
        }

    }

然后在您创建的功能中,只需传递发件人:

@IBAction func addText(sender: AnyObject) {

    resetTabBar(sender)

}

注意:假设您有所有按钮的插座。如果不这样做,请添加它们。

答案 1 :(得分:1)

我发现了同样的问题。可能可以帮到你。 custom-pressed-uibarbuttonitem-backgrounds

我找到了一个简单的方法。你可以将一个按钮拖到工具栏上,你会看到这样的。

您应该更改按钮的类型和图像。 storyboard screenshot

然后你应该将按钮链接到你的viewController。

@IBOutlet weak var textToolButton: UIButton!

你可以做到。

let selectedBackgroundColor = UIImage(color: .redColor())
textToolButton.setBackgroundImage(selectedBackgroundColor, forState: .Highlighted)

我可以帮助你。