【问题标题】:Tracking a UIBarButtonItem selected state?跟踪 UIBarButtonItem 的选定状态?
【发布时间】:2014-01-06 23:39:30
【问题描述】:
有没有办法在不使用自定义视图的情况下突出显示(即切换)UIBarButtonItem?
例如,查看 地图 应用中的 3D 按钮:
或音乐应用中的Shuffle All:
【问题讨论】:
标签:
ios
ios7
uibarbuttonitem
uitoolbar
uiappearance
【解决方案1】:
您可以设置UIBarButtonItem的背景图片:
item.setBackgroundImage(UIImage(named: "item-bg.png"), forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
然后当你想取消选择它时,将背景图片设置为nil:
item.setBackgroundImage(nil, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
(你必须为背景创建一个图像文件)
【解决方案2】:
问题是 wile UIControl 有一个 isSelected 属性来实现这个目标,UIBarButtonItem 没有继承它,所以你不能转换它并设置值。但是,我发现了一个奇怪的解决方法。如果你将按钮动作的sender的类型设置为UIControl,它将被视为一个成熟的UIControl,你可以设置isSelected。
例如:
@objc func showContentsView(_ sender: UIControl) {
sender.isSelected.toggle()
}
如果您需要在其他地方切换状态,您可以在视图控制器上设置一个变量,如下所示:
var selectedControl: UIControl?
在您的操作中设置selectedControl 的值,并在取消选择时将其设置为nil。
【解决方案3】:
item.image = UIImage(named: isSelected ? "SelectedImage" : "NormalImage")