【问题标题】:Not able to set color to segment control无法将颜色设置为分段控制
【发布时间】:2020-09-05 04:16:27
【问题描述】:

我有这样的颜色“CC0000”

现在要将此颜色分配给我选择的片段,我首先尝试使用此扩展。

extension UIColor {

    // MARK: - Initialization

    convenience init?(hex: String) {
        var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines)
        hexSanitized = hexSanitized.replacingOccurrences(of: "#", with: "")

        var rgb: UInt32 = 0

        var r: CGFloat = 0.0
        var g: CGFloat = 0.0
        var b: CGFloat = 0.0
        var a: CGFloat = 1.0

        let length = hexSanitized.count

        guard Scanner(string: hexSanitized).scanHexInt32(&rgb) else { return nil }

        if length == 6 {
            r = CGFloat((rgb & 0xFF0000) >> 16) / 255.0
            g = CGFloat((rgb & 0x00FF00) >> 8) / 255.0
            b = CGFloat(rgb & 0x0000FF) / 255.0

        } else if length == 8 {
            r = CGFloat((rgb & 0xFF000000) >> 24) / 255.0
            g = CGFloat((rgb & 0x00FF0000) >> 16) / 255.0
            b = CGFloat((rgb & 0x0000FF00) >> 8) / 255.0
            a = CGFloat(rgb & 0x000000FF) / 255.0

        } else {
            return nil
        }

        self.init(red: r, green: g, blue: b, alpha: a)
    }

    // MARK: - Computed Properties

    var toHex: String? {
        return toHex()
    }

    // MARK: - From UIColor to String

    func toHex(alpha: Bool = false) -> String? {
        guard let components = cgColor.components, components.count >= 3 else {
            return nil
        }

        let r = Float(components[0])
        let g = Float(components[1])
        let b = Float(components[2])
        var a = Float(1.0)

        if components.count >= 4 {
            a = Float(components[3])
        }

        if alpha {
            return String(format: "%02lX%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255), lroundf(a * 255))
        } else {
            return String(format: "%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255))
        }
    }

}

我就是这样使用它的..

let color = UIColor(hex: selectedColor)。 //“selectedColor”是“CC0000”

但是现在当我打印color 时,我得到Optional(UIExtendedSRGBColorSpace 0.8 0 0 1)

但我不确定如何将此颜色设置为我的 segmentControl 的 tintColor。如果我执行self.segCriticalityABCD.tintColor = color 之类的操作,它不会显示任何颜色..

【问题讨论】:

  • 你应该在使用它之前打开可选的。

标签: ios swift hex uicolor


【解决方案1】:

您的扩展程序创建的颜色工作正常:

guard let color = UIColor(hex: "#CC0000") else { return }

这将设置所选段的文本颜色:

segmentedControl.setTitleTextAttributes([.foregroundColor: color], for: .selected)

这将设置所选片段的颜色:

segmentedControl.selectedSegmentTintColor = color

此处提供其他有价值的信息:

How to set UISegmentedControl Tint Color for individual segment

这里:

https://developer.apple.com/documentation/uikit/uisegmentedcontrol

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2014-07-08
    • 2012-11-12
    • 2021-05-12
    • 1970-01-01
    相关资源
    最近更新 更多