iOS 自定义button

自定义button的作用

有时候写项目会需要有label和imageView等等很多控件加在一起使用,我之前用很多个UI控件拼接使用,但是总感觉有点low,不够专业,就开始学习自定义button
再啰嗦一句:UIButton默认的布局是左侧image,右侧title,如果想要改变image与title的frame,直接设置是不会有效果的。可以通过titleEdgeInsets、imageEdgeInsets分别修改image与title的位置。也可以通过自定义button

效果图

此处我只放了一个button,若在cell或是多个button相同的情况下使用会很方便
iOS 自定义button_第1张图片

代码实现

首先自定义button

@implementation TAYButton

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.titleLabel.font = [UIFont systemFontOfSize:15];
        self.titleLabel.textAlignment = NSTextAlignmentCenter;
        
        [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    }
    return self;
}

- (CGRect)imageRectForContentRect:(CGRect)contentRect {
    CGFloat imageX = 0;
    CGFloat imageY = 0;
    CGFloat imageW = 30;
    CGFloat imageH = 30;
    return CGRectMake(imageX, imageY, imageW, imageH);
}

- (CGRect)titleRectForContentRect:(CGRect)contentRect {
    CGFloat titleX = 30;
    CGFloat titleY = 0;
    CGFloat titleW = 50;
    CGFloat titleH = 30;
    return CGRectMake(titleX, titleY, titleW, titleH);
}

然后在项目中使用:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    TAYButton *tayButton = [[TAYButton alloc] initWithFrame:CGRectMake(50, 50, 100, 150)];
    [tayButton setTitle:@"pick" forState:UIControlStateNormal];
    [tayButton setImage:[UIImage imageNamed:@"pick.png"] forState:UIControlStateNormal];
    [self.view addSubview:tayButton];
    
}

使用函数

苹果给我们提供了4个API

- (CGRect)backgroundRectForBounds:(CGRect)bounds;
- (CGRect)contentRectForBounds:(CGRect)bounds;
- (CGRect)titleRectForContentRect:(CGRect)contentRect;
- (CGRect)imageRectForContentRect:(CGRect)contentRect;

重写button的title

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

重写button的image

- (CGRect)imageRectForContentRect:(CGRect)contentRect;

这里的contentRect就是你当前在使用自定义Button的控件的width和height。重写这个方法,可以让button的控件变换位置和改变大小。

其他两个我不经常用到,也就不班门弄斧了,见谅。

你可能感兴趣的:(iOS)