我的导航控制器中有这个工具栏。现在我要做的是当用户在我的工具栏中选择一个项目(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
}
背景仍未改变颜色
答案 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)
我可以帮助你。