【问题标题】:How to I properly set UIColor from int?如何从 int 正确设置 UIColor?
【发布时间】:2013-10-16 13:48:52
【问题描述】:

我正在尝试通过为其分配一个值来设置UITextViewtextColor

在我之前的计划中

textView.textColor = 0x000000;

但后来,当我有

textView.textColor = 0x888888;

会弹出一个致命错误:“ARC 不允许将 'int' 隐式转换为 'UIColor *'”。

如何将我的 int 转换为 UIColor 以正确设置文本颜色?为什么它适用于 0x000000 而不是 0x888888?

【问题讨论】:

  • 0x000000 是十六进制,这是一个 16 基数系统,但这也被认为是 nil 引用,根据引用是否存在而被视为 0 或 1 textView.textColor = 0x000000;可能是黑色的。

标签: ios implicit-conversion uicolor


【解决方案1】:

正如您提交的答案,这不是答案 UIColorFromRGB 是上面在 @implementation 上定义的宏

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0];

那你就可以用like了

textView.textColor = UIColorFromRGB(0x888888);

你可以使用它的UIColor属性来设置目标c中文本bg-color等的颜色

【讨论】:

    【解决方案2】:

    斯威夫特版本

    您可以使用以下函数将RGB 十六进制颜色Int 转换为UIColor

    func uiColorFromHex(rgbValue: Int) -> UIColor {
        
        // &  binary AND operator to zero out other color values
        // >>  bitwise right shift operator
        // Divide by 0xFF because UIColor takes CGFloats between 0.0 and 1.0
        
        let red =   CGFloat((rgbValue & 0xFF0000) >> 16) / 0xFF
        let green = CGFloat((rgbValue & 0x00FF00) >> 8) / 0xFF
        let blue =  CGFloat(rgbValue & 0x0000FF) / 0xFF
        let alpha = CGFloat(1.0)
        
        return UIColor(red: red, green: green, blue: blue, alpha: alpha)
    }
    

    而且可以这样使用

    let myColorValue = 0x888888
    let color = uiColorFromHex(myColorValue)
    

    【讨论】:

      【解决方案3】:

      有必要使用

      textView.textColor = [UIColor colorWithRed:<#(CGFloat)#> green:<#(CGFloat)#> blue:<#(CGFloat)#> alpha:<#(CGFloat)#>];
      

      试试看:

      - (UIColor *)UIColorFromRGB:(NSInteger)rgbValue {
          return [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0
                                 green:((float)((rgbValue & 0xFF00) >> 8))/255.0
                                  blue:((float)(rgbValue & 0xFF))/255.0
                                 alpha:1.0];
      }
      

      ...

      textView.textColor = [self UIColorFromRGB:0x888888];
      

      【讨论】:

        【解决方案4】:

        我发现您可以使用 UIColorFromRGB() 将其转换为 UIColor。

        例如

        textView.textColor = UIColorFromRGB(0x888888);
        

        【讨论】:

          【解决方案5】:

          您可以按照以下步骤执行此操作:

          1. 使用HexToRGB将十六进制值转换为RGB。

          2. 然后通过这样做改变你的文本视图的文本颜色:

             textview.textColor = [UIColor colorWithRed:244/255.00f
                green:133/255.00f blue:116/255.00f alpha:1.0f]; // values are just an example
            

          【讨论】:

            【解决方案6】:

            Swift 扩展版本

            public extension UIColor {
            public convenience init<T>(rgbValue: T, alpha: CGFloat = 1) where T: BinaryInteger {
                guard rgbValue > 0 else {
                    self.init(red: 0, green: 0, blue: 0, alpha: alpha)
                    return
                }
            
                guard rgbValue < 0xFFFFFF else {
                    self.init(red: 1, green: 1, blue: 1, alpha: alpha)
                    return
                }
            
                let r: CGFloat = CGFloat(((rgbValue & 0xFF0000) >> 16) / 0xFF)
                let g: CGFloat = CGFloat((rgbValue & 0x00FF00) >> 8 / 0xFF)
                let b: CGFloat = CGFloat((rgbValue & 0x0000FF) / 0xFF)
            
                self.init(red: r, green: g, blue: b, alpha: alpha)
            }
            

            }

            用法:

            let white =  UIColor(rgbValue: 16777215)
            let red =    UIColor(rgbValue: 16711680)
            let green =  UIColor(rgbValue: 0x00FF00)
            let blue =   UIColor(rgbValue: 0x0000FF)
            let yellow = UIColor(rgbValue: 0xFFFF00)
            let black =  UIColor(rgbValue: 0)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-12-22
              • 1970-01-01
              • 2012-02-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-03
              相关资源
              最近更新 更多