有没有办法在Interface Builder中选择tintColor?

时间:2016-10-22 13:16:58

标签: swift xcode interface-builder tintcolor

如果我想,例如在tintColor中创建一个按钮的背景,我该如何在Interface Builder中完成? 我真的不明白为什么在所有颜色选择中都没有“tintColor”选项。 也许这里有我想念的东西?

PS:我知道我可以在代码中执行此操作,但如果XCode中存在某些内容,我更愿意使用它。

2 个答案:

答案 0 :(得分:2)

您将在属性检查器下找到Tint选项。你必须向下滚动一下,因为它没有与顶部的文字/阴影颜色选项分组。

tint option

这是在XCode 8中,但我很确定我已经将它视为一种选择,至少从XCode 6开始。

答案 1 :(得分:0)

您将需要扩展UIButton来实现。这是示例代码

class ColoredButton: UIButton {
    // MARK: Overrides

    override public func layoutSubviews() {
        super.layoutSubviews()
        redraw()
    }

    override public var isEnabled: Bool {
        didSet {
            layoutSubviews()
        }
    }

    // MARK: Private

    private func redraw() {
        self.layer.cornerRadius = 6

        if self.isEnabled {
            self.backgroundColor = UIApplication.shared.delegate?.window!?.tintColor
        } else {
            self.backgroundColor = UIColor.gray
        }
    }
}

PS:我敢肯定,我在Apple应用程序中的某个地方看到过这样的彩色按钮。这也在他们的人机界面指南(https://developer.apple.com/design/human-interface-guidelines/ios/controls/buttons/)中。但是不知道为什么他们没有在UIKit中使用状态管理来实现它的风格。 BackgroudColor默认情况下不支持状态,如果您希望在用户选择按钮时在背景上获得透明性,则必须实现该状态。也许另一种方法是将UIColor转换为UIImage,因为backgroundImage支持状态。我几乎可以肯定这也不是一个好主意:)