【问题标题】: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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      相关资源
      最近更新 更多