美文网首页
UIButton中图片、文本的位置

UIButton中图片、文本的位置

作者: 流光还铅华 | 来源:发表于2017-12-14 19:03 被阅读32次

    在ios开发中UIButton是个很常用的控件。我们常常会遇到这样的需求,在一个按钮里面需要有文字和图片。如图:

    添加按钮.png

    我们有三种方式可以实现:

    1、UIButton自带属性imageEdgeInsets、titleEdgeInsets实现

    2、其它控件组合实现

    3、重写UIButton

    第1,2两种实现方法大家都比较常用,我们主要讲第3种实现。

    上代码:

    h文件
    #import <UIKit/UIKit.h>
    
    @interface ZKButton : UIButton
    
    @property (nonatomic,assign)CGRect imageFrame;
    @property (nonatomic,assign)CGRect titleFrame;
    
    
    -(void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)UIControlState;
    @end
    
    m文件
    #import "ZKButton.h"
    @interface ZKButton ()
    @property (nonatomic,strong)UIColor* hColor;
    @property (nonatomic,strong)UIColor* nColor;
    
    @end
    @implementation ZKButton
    
    -(instancetype)init{
        self = [super init];
        if (self) {
            [self addObserver:self forKeyPath:@"highlighted" options:NSKeyValueObservingOptionNew context:nil];
        }
        return self;
    }
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
        UIButton *button = (UIButton *)object;
        if ([keyPath isEqualToString:@"highlighted"]) {
            if (button.highlighted) {
                if (self.hColor) {
                    [button setBackgroundColor:self.hColor];
                }
                return;
            }
            if (self.nColor) {
                [button setBackgroundColor:self.nColor];
            }
        }
    }
    -(void)dealloc{
        [self removeObserver:self forKeyPath:@"highlighted"];
    }
    
    -(void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)UIControlState{
        if (UIControlState == UIControlStateNormal ) {
            [self setBackgroundColor:backgroundColor];
            self.nColor = backgroundColor;
        }
        if (UIControlState == UIControlStateHighlighted) {
            self.hColor = backgroundColor;
        }
    }
    
    -(void)setImageFrame:(CGRect)imageFrame{
        _imageFrame = imageFrame;
    }
    -(void)setTitleFrame:(CGRect)titleFrame{
        _titleFrame = titleFrame;
    }
    
    
    - (CGRect)imageRectForContentRect:(CGRect)contentRect
    {
        if (self.imageFrame.size.width>0&&self.imageFrame.size.height>0) {
            return self.imageFrame;//图片的位置大小
        }else{
            return [super imageRectForContentRect:contentRect];
        }
    }
    
    -(CGRect)titleRectForContentRect:(CGRect)contentRect
    {
        ZKLog(@"%@",NSStringFromCGRect(contentRect));
        if (self.titleFrame.size.width>0&&self.titleFrame.size.height>0) {
            return self.titleFrame;//文本的位置大小
        }else{
            return [super titleRectForContentRect:contentRect];
        }
    }
    
    @end
    
    主要方法
    //重写系统方法控制图片位置
    - (CGRect)imageRectForContentRect:(CGRect)contentRect;
    //重写系统方法控制文本位置
    - (CGRect)titleRectForContentRect:(CGRect)contentRect;
    
    功能和使用

    1、设置imageFrame以控制图片位置
    2、设置titleFrame以控制文本位置
    3、设置高亮状态时的背景颜色

    //设置高亮状态时的背景颜色
    -(void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)UIControlState; 
    

    相关文章

      网友评论

          本文标题:UIButton中图片、文本的位置

          本文链接:https://www.haomeiwen.com/subject/maflwxtx.html