从 UIColor 属性设置 UIView 的 backgroundColor 的问题

Posted

技术标签:

【中文标题】从 UIColor 属性设置 UIView 的 backgroundColor 的问题【英文标题】:Problem with setting UIView's backgroundColor from a UIColor property 【发布时间】:2011-09-03 09:18:40 【问题描述】:

我正在尝试根据我在另一个类中设置的属性来设置视图的背景颜色。视图类部分如下所示:

// Interface iVar and property
UIColor * coverColor;
@property (nonatomic, retain) UIColor * coverColor;

// Where I set up the view
CGRect cover = CGRectMake(19.0, 7.0, coverWidth, coverHeight);
UIView * coverView = [[UIView alloc] initWithFrame:cover];
coverView.layer.cornerRadius = 5;
coverView.backgroundColor = coverColor;
[self.contentView addSubview:coverView];
[coverView release];
coverView = nil;

// In my other class where I try to set the color
cell.coverColor = noteblock.color;

// noteblock is a instance of a custom model (NSManagedObject) class. It have a property called color. The type is set to Transformable. It looks like this:
@property (nonatomic, retain) UIColor * color;
@dynamic color;

// I set the color like this when I create new Noteblock objects:
newNoteblock.color = [[[UIColor alloc] initWithRed:255.0/255.0 green:212.0/255.0 blue:81.0/255.0 alpha:1] autorelease];

当我在模拟器中运行应用程序时,没有颜色显示,它是透明的。关于如何解决这个问题的任何想法?

【问题讨论】:

你在哪里将颜色值传递给 coverColor 属性?你真的得到了存储在 tat 中的值吗? chk 使用 NSLog ... 当我运行 NSLog(@"%@", noteblock.color); (存储在数据库中的颜色)我得到以下输出: UIDeviceRGBColorSpace 1 0.831373 0.317647 1. 【参考方案1】:

cell.coverColor = noteblock.color; 行改变了coverColor 属性,但没有改变coverView 的backgroundColor。 您可以直接设置背景颜色(无需附加属性):

coverView = [cell coverView];
coverView.backgroundColor = noteblock.color;

或者覆盖coverColor的设置器:

-(void) setCoverColor:(UIColor*)color

    if (coverColor != color)
    
        [coverColor release];
        coverColor = [color retain];
        coverView.backgroundColor = coverColor;
    

【讨论】:

这不起作用,因为作者想要设置coverView-backgroundColor 而不是单元格的那个。您需要使用标签或其他 iVar 获取对 coverView 的引用。 Thins 有效,但我不想设置视图的 backgroundColor,而是设置视图的子视图之一。对不起,在问题中不清楚。像这样:CGRect cover = CGRectMake(19.0, 7.0, coverWidth, coverHeight); coverView = [[UIView alloc] initWithFrame:cover]; coverView.layer.cornerRadius = 5; coverView.backgroundColor = coverColor; 我通过对您的答案稍作修改来解决它,覆盖 setCoverColor 就可以了。谢谢!

以上是关于从 UIColor 属性设置 UIView 的 backgroundColor 的问题的主要内容,如果未能解决你的问题,请参考以下文章

UIView alpha与UIColor alpha

详解 UIView 的 Tint Color 属性

保留蒙面 UIView 的阴影

详解 UIView 的 Tint Color 属性

带有图案图像和颜色的 UIColor

UIView 的神秘 UIColor 行为以及 Swift 中的一般行为