如何为客户 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 设置属性的主要内容,如果未能解决你的问题,请参考以下文章