追踪UIBarButtonItem的选中状态?

9
有没有一种方法可以突出显示(即切换)UIBarButtonItem而不使用自定义视图?
例如,查看地图应用程序中的3D按钮:
或者来自音乐应用程序的“全部随机”:
请注意:请勿添加解释。

可能是 以编程方式高亮UIBarButtonItem 的重复问题。 - nemesis
请查看我在这里回答基本相同问题的答案:https://dev59.com/9WIk5IYBdhLWcg3wYtT7 - Kevin_TA
3个回答

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
问题在于,虽然 UIControl 有一个可以实现此目标的 isSelected 属性,但 UIBarButtonItem 没有继承自它,因此您无法将其强制转换并设置值。然而,我发现了一个奇怪的解决方法。如果将按钮操作的 sender 类型设置为 UIControl,它将被视为完整的 UIControl,并且您可以设置 isSelected

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

如果需要在其他位置切换状态,可以在您的视图控制器上定义一个变量:

var selectedControl: UIControl?

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


1
有趣,但可能不太安全。 - Koen.

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接