Swift - UIToolbar 项目选择状态

Swift - UIToolbar item selected state

我的导航控制器中有这个工具栏。现在我要做的是当用户在我的工具栏中选择一个项目 (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
}

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

这是我得到的:

@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
    }

背景仍然没有变色

最简洁的方法是创建一个整体函数,在其中传入已选中的按钮。像这样:

    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)

}

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

我发现了同样的问题。也许可以帮助你。 custom-pressed-uibarbuttonitem-backgrounds

我找到了一个简单的方法。你可以拖一个按钮到toolBar,你会看到这样的。

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

那么你应该 link 按钮到你的 viewController。

@IBOutlet weak var textToolButton: UIButton!

你可以的。

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

也许我可以帮助你。