UIBarButtonItem选择状态

时间:2014-01-06 23:39:30

标签: ios7 uibarbuttonitem uitoolbar uiappearance

有没有办法在不使用自定义视图的情况下突出显示(切换)UIBarButtonItem?

例如,请参阅" 3D" Maps.app中的按钮:

enter image description here

或"随机播放"

enter image description here

3 个答案:

答案 0 :(得分:2)

您可以设置UIBarButtonItem

的背景图片
item.setBackgroundImage(UIImage(named: "item-bg.png"), forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)

然后,当您想要取消选择它时,请将背景图像设置为nil

item.setBackgroundImage(nil, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)

(你必须为背景创建一个图像文件)

答案 1 :(得分:1)

问题在于,UIControl拥有一个isSelected属性来实现此目标,UIBarButtonItem不继承自该属性,因此您无法进行强制转换和设置值。但是,我发现了一个奇怪的解决方法。如果将按钮操作的sender的类型设置为UIControl,它将被视为成熟的UIControl,并且可以设置isSelected

例如:

    @objc func showContentsView(_ sender: UIControl) { 
        sender.isSelected.toggle()
    }

如果您需要在其他位置切换状态,则可以在View Controller上设置一个变量,如下所示:

var selectedControl: UIControl?

在操作中设置selectedControl的值,并在取消选择时将其设置为nil

答案 2 :(得分:0)

item.image = UIImage(named: isSelected ? "SelectedImage" : "NormalImage")