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

问题描述 投票:3回答:3

我正在尝试在自定义UIButton周围绘制边框。这不起作用:“在此处输入图像描述”

为什么?

ios uiview uibutton xcode6 calayer
3个回答
10
投票

click here to solve the problem

[请允许我在这里重复。.^ _ ^

运行时属性功能允许我们设置UIColor类型,需要将其转换为CGColor类型。为此,我们需要扩展CALayer类,该属性将转换UIColor到CGColor,我们需要它的边框和阴影。

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

请参阅以下代码。

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或情节提要中设置运行时属性功能的borderColor时,请设置borderIBColor而不是borderColor。看起来像layer.borderIDColor

玩得开心。


3
投票

cornerRadius&cornerRadius是CGFloat,使用数字进行更改。

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。直接

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9jdDBUQS5qcGcifQ==” alt =“在此处输入图像描述”>


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.