我有一个按钮,我试图添加这样的边框: .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;
}
没有设置边框,我做错了什么?
答案 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覆盖图层上的边框,将背景颜色移动到图层而不是将其放在后面(并将其剪裁到)边框