如何为自定义UIButton属性

时间:2014-02-15 21:31:38

标签: ios cocoa-touch uibutton

我有一个按钮,我试图添加这样的边框: .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;
}

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

3 个答案:

答案 0 :(得分: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]];

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

答案 1 :(得分:0)

添加

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];
}

答案 2 :(得分:0)

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

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

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