如何为客户 UIButton 设置属性

Posted

技术标签:

【中文标题】如何为客户 UIButton 设置属性【英文标题】:how to attributes for customer UIButon 【发布时间】:2014-02-15 21:31:37 【问题描述】:

我有一个按钮,我正在尝试添加一个边框,如下所示: .h

@interface MyButton : UIButton

.m

@implementation MyButton

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 


    

    self.layer.borderWidth=1.0f;
    self.layer.cornerRadius = 4;
    self.layer.borderColor=[[UIColor blueColor] CGColor];

    return self;

没有设置边框,我做错了什么?

【问题讨论】:

Quartz 框架链接了吗? 【参考方案1】:

UIButton 不应该被子类化,如果你想要做的只是样式按钮,我建议使用一个类别。这是一个示例类别来完成你想要的......请注意,这还没有通过编译器运行,但你明白了:

UIButton+Styles.h

#import <UIKit/UIKit.h>

@interface UIButton (Styles)

-(void)styleWithBorderColor:(UIColor *)color;
@end

.m

#import "UIButton+Styles.h"
#import <QuartzCore/QuartzCore.h>

@implementation UIButton (CURStyles)
-(void)styleWithBorderColor:(UIColor *)color

    self.layer.masksToBounds = YES;
    self.layer.cornerRadius = 4.0f;
    self.layer.borderWidth = 1.0f;
    self.layer.borderColor = color.CGColor;        

@end

现在,当您想要为按钮设置样式时,只需导入类别并像这样调用它:

[myButton styleWithBorderColor:[UIColor whiteColor]];

编辑: 请参阅 cmets... 这些应该加上前缀以避免与框架方法混淆

【讨论】:

你真的应该为类别方法添加前缀 保罗是正确的。请参阅这些指南developer.apple.com/library/ios/documentation/cocoa/conceptual/… 上述方法应以三个字母“xyz_styleWithBorderColor”为前缀【参考方案2】:

添加

self.layer.masksToBounds = YES;

此外,如果您通过 Nib 或 Storyboard 文件创建按钮,则不会调用 initWithFrame 方法。在这种情况下,不要忘记将您的附加代码放在 awakeFromNib 方法中

- (void)awakeFromNib

    self.layer.masksToBounds = YES;
    self.layer.borderWidth=1.0f;
    self.layer.cornerRadius = 4;
    self.layer.borderColor=[[UIColor blueColor] CGColor];

【讨论】:

【参考方案3】:

子类化 UIButton 没有任何问题。我建议你可能需要设置

self.backgroundColor = nil; // or [UIColor clearColor]
self.layer.backgroundColor = desiredBackgroundColor.CGColor;

UIView 中的背景色覆盖了图层上的边框,将背景色移到图层上而不是放在(并剪辑到)边框的后面

【讨论】:

以上是关于如何为客户 UIButton 设置属性的主要内容,如果未能解决你的问题,请参考以下文章

UIButton的界面状态

如何为 UIButton 设置自定义渐变背景?

如何为 UIButton 设置默认状态图像?

如何为 1px 宽的 UIButton 添加黑色轮廓?

如何为数组中的每个创建一个具有唯一图像和选择器的自定义 UIButton?

UIButton 动作