UIButton用户定义的运行时属性不起作用

时间:2015-03-22 11:35:00

标签: ios uiview uibutton xcode6 calayer

我正在尝试在自定义UIButton周围绘制边框。 这不起作用: enter image description here

为什么?

4 个答案:

答案 0 :(得分:10)

click here to solve the problem

请允许我在这里重复一遍.. ^ _ ^

运行时属性功能允许我们设置UIColor类型,我们需要将其转换为CGColor类型。 为了实现这一点,我们需要扩展CALayer类具有将UIColor转换为CGColor的属性,我们需要边框和阴影。

您可以使用类别扩展Objective-C中的类。我添加了两个名为borderIBColor和shadowIBColor的属性,类型为UIColor。 IB代表界面构建器。我必须给这些属性一个唯一的名称,以避免名称与名为borderColor和shadowColor的属性CGColor类型冲突。

请参阅以下代码。

<强>的CALayer + RuntimeAttribute.h

@import QuartzCore;

@interface CALayer (IBConfiguration)

@property(nonatomic, assign) UIColor *borderIBColor;

@end

<强>的CALayer + RuntimeAttribute.m

@implementation CALayer (IBConfiguration)

- (void)setBorderIBColor:(UIColor *)color {
    self.borderColor = color.CGColor;
}

- (UIColor *)borderIBColor {
    return [UIColor colorWithCGColor:self.borderColor];
}

@end

最后,当你在xib或storyboard中设置运行时属性功能的 borderColor 时,请设置 borderIBColor 而不是 borderColor 。它看起来像 layer.borderIDColor

祝你玩得开心。

答案 1 :(得分:3)

cornerRadius&amp; cornerRadius是CGFloat,使用Number来改变。

borderColor是CGColor,无法通过运行时属性进行更改。 (您可以添加一个类别以支持UIColor来更改CGColor)

助手类别:

的UIView + IBHelper.h:

@interface UIView (IBHelper)

- (void)setBorderColor:(UIColor *)color;

@end

的UIView + IBHelper.m:

@implementation UIView (IBHelper)

- (void)setBorderColor:(UIColor *)color
{
    self.layer.borderColor = color.CGColor;
}

@end

并在运行时属性中使用borderColor。直接

enter image description here

答案 2 :(得分:0)

分配其他属性后,您忘记了layer.masksToBounds = true属性。 它对我有用。

答案 3 :(得分:0)

适用于 UIBuilder 爱好者的 Swift 5 解决方案:

#1 对于 UIButton,它停留在 CGColor 世界中,但用户定义的运行时属性仅提供 UIColor 选择。这些协议不匹配,所以你的边框不会显示,因为没有颜色。修复:

在您的 viewDidLoad 中,使用...以编程方式设置 borderColor

{
    "Write pdb": {
        "prefix": "pdb",
        "body": [
            "import pdb; pdb.set_trace()",
            "$2"
        ],
        "description": "Write pdb.set_trace() to debug Python scripts"
    }
}

#2 确保所有其他属性(borderWidth、cornerRadius)在格式中都有“layer”。所以应该是 layer.cornerRadius Number 1 [见图片]

#3。你不需要 maskToBounds

图 1:从左到右 = 结果、故事板、UDRA“代码” enter image description here