.h
#import
@interface UIButton (UIButtonImageWithLable)
/**
* 上面图片,底部文字 button
*
* @param image Picture
* @param title Title Text
* @param stateType UIControlState
* @param tintColor tintColor
*/
- (void) setTopAndBottomImage:(UIImage *)image withTitle:(NSString *)title forState:(UIControlState)stateType andTintColor:(UIColor *)tintColor;
/**
* 左边图片右边文字
*
* @param image 图片
* @param title title
* @param stateType UIControlState
* @param textFont titleLabel Font Size
*/
- (void) setLeftAndRightTextWithImage:(UIImage *)image withTitle:(NSString *)title forState:(UIControlState)stateType withTextFont:(float)textFont;
/**
* 左边文字,右边图片
*
* @param image Picture
* @param title Title
* @param stateType UIControlState
* @param imageFontV ImageFont
* @param titleFontV Title Font
*/- (void) setRightAndleftTextWithImage:(UIImage *)image withTitle:(NSString *)title forState:(UIControlState)stateType andImageFontValue:(float)imageFontV andTitleFontValue:(float)titleFontV;
@end
#import "UIButton+UIButtonImageWithLable.h"
@implementation UIButton (UIButtonImageWithLable)
/**
* 上面图片,底部文字 button
*
* @param image Picture
* @param title Title Text
* @param stateType UIControlState
* @param tintColor tintColor
*/
- (void) setTopAndBottomImage:(UIImage *)image withTitle:(NSString *)title forState:(UIControlState)stateType andTintColor:(UIColor *)tintColor {
//UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)
int gapX = (self.frame.size.width- image.size.width)/2;
[self.imageView setContentMode:UIViewContentModeCenter];
[self setImageEdgeInsets:UIEdgeInsetsMake(0,
gapX,
25,
gapX)];
[self setImage:image forState:stateType];
//[self setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:stateType];
[self.titleLabel setContentMode:UIViewContentModeCenter];
[self.titleLabel setBackgroundColor:[UIColor clearColor]];
[self.titleLabel setFont:[UIFont systemFontOfSize:12.0]];
[self.titleLabel setTextColor:[UIColor darkGrayColor]];
[self setTintColor:tintColor];
[self setTitleEdgeInsets:UIEdgeInsetsMake(image.size.height,
-image.size.height,
0.0,
0.0)];
[self setTitleColor:tintColor forState:stateType];
[self setTitle:title forState:stateType];
}
#pragma mark 备注:如果不需要上下显示,只需要横向排列的时候,就不需要设置左右偏移量了,代码如下
/**
* 左边图片右边文字
*
* @param image 图片
* @param title title
* @param stateType UIControlState
* @param textFont titleLabel Font Size
*/
- (void) setLeftAndRightTextWithImage:(UIImage *)image withTitle:(NSString *)title forState:(UIControlState)stateType withTextFont:(float)textFont {
//UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)
[self setImageEdgeInsets:UIEdgeInsetsMake(0.0,
0.0,
0.0,
0.0)];
[self setImage:image forState:stateType];
self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[self.titleLabel setFont:[UIFont systemFontOfSize:textFont]];
[self.titleLabel setTextColor:[UIColor darkGrayColor]];
[self setTitleEdgeInsets:UIEdgeInsetsMake(0.0,
0.0,
0.0,
0.0)];
[self setTitle:title forState:stateType];
}
/**
* 左边文字,右边图片
*
* @param image Picture
* @param title Title
* @param stateType UIControlState
* @param imageFontV ImageFont
* @param titleFontV Title Font
*/
- (void) setRightAndleftTextWithImage:(UIImage *)image withTitle:(NSString *)title forState:(UIControlState)stateType andImageFontValue:(float)imageFontV andTitleFontValue:(float)titleFontV {
//UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)
[self setContentEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[self.imageView setContentMode:UIViewContentModeCenter];
[self setImageEdgeInsets:UIEdgeInsetsMake(0.0,
self.frame.size.width- image.size.width,
0.0,
0.0)];
[self setImage:image forState:stateType];
self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight; //使得button中titleLabel 居中 左对齐,右对齐
self.titleLabel.textAlignment = NSTextAlignmentRight;
[self.titleLabel setFont:[UIFont systemFontOfSize:titleFontV]];
[self.titleLabel setTextColor:[UIColor darkGrayColor]];
[self setTitleEdgeInsets:UIEdgeInsetsMake(0.0,
-image.size.width,
0.0,
image.size.width)]; // 设置边距
[self setTitle:title forState:stateType];
}
@end