NSMutableAttributedString---UIButton封装-自带imageview&titlelabel

不知道大家有木有碰到下面这种图标,其实这种在iOS应用上是经常看到的,拿到这种样式的东西怎么做呢?封装,UIImageView+UILabel+UILabel加到UIButton上就可以了,但是这个局限性太大了,很多时候根本达不到那种效果,比如点击阴影,使用的流畅性!这时候我们就得想办法了,而最直接有效的办法就莫过于使用UIButton上自带的imageview&titlelabel做文章了。详情见代码,已经很详细!我的图片是56*56 @2x的,如果大小不同,再稍微调整,为了上传方便,我就用本地图片代替url地址!

原理自行百度!

 1 #define RGBACOLOR(r,g,b,a)  2 [UIColor colorWithRed:r/255.f green:g/255.f blue:b/255.f alpha:a]
 3
 4 #import "UIButton+Service.h"
 5 @implementation UIButton (Service)
 6 - (void)MyButtonWithFrame:(CGRect)frame
 7                textString:(NSString *)textString
 8                 subString:(NSString *)subString
 9                  imageUrl:(NSString *)imageUrl
10
11 {
12
13     self.backgroundColor = [UIColor whiteColor];
14     self.frame = frame;
15     [self setImage:[UIImage imageNamed:imageUrl] forState:UIControlStateNormal];
16     [self setImage:[UIImage imageNamed:imageUrl] forState:UIControlStateHighlighted];
17
18     [self setTitle:textString forState:UIControlStateNormal];
19     [self setTitleColor:RGBACOLOR(59, 59, 59, 1.0) forState:UIControlStateNormal];
20     self.titleLabel.font = [UIFont fontWithName:@"Arial" size:13];
21
22
23     self.titleLabel.numberOfLines = 0;
24     self.titleLabel.textAlignment = NSTextAlignmentCenter;
25
26     //行间距离
27     NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
28     paragraphStyle.alignment = NSTextAlignmentCenter;
29     paragraphStyle.lineSpacing = 6.0;
30     NSDictionary *ats = @{
31                           NSParagraphStyleAttributeName : paragraphStyle,
32                           };
33
34     //文字分行 并设置字体颜色,大小
35     NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@\n%@",textString,subString] attributes:ats];
36
37     [str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Arial" size:15] range:NSMakeRange(0, textString.length)];
38     [str addAttribute:NSForegroundColorAttributeName value:RGBACOLOR(59, 59, 59, 1.0) range:NSMakeRange(0, textString.length)];
39     [str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Arial" size:10] range:NSMakeRange(str.length - subString.length, subString.length)];
40     [str addAttribute:NSForegroundColorAttributeName value:RGBACOLOR(0xA0, 0xA0, 0xA0, 1.0) range:NSMakeRange(str.length - subString.length, subString.length)];
41     [self setAttributedTitle:str forState:UIControlStateNormal];
42
43     //调整图片和字体的位置
44     CGSize titleSize = [textString boundingRectWithSize:CGSizeMake(0, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:@"Arial" size:15]} context:nil].size;
45     CGSize titleSizea = [subString boundingRectWithSize:CGSizeMake(0, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:@"Arial" size:10]} context:nil].size;
46     CGFloat t = (titleSize.width > titleSizea.width)?titleSize.width:titleSizea.width;
47     [self setImageEdgeInsets:UIEdgeInsetsMake(-32.0,0.0,0,-t)];
48     [self setTitleEdgeInsets:UIEdgeInsetsMake(60.0,-28,0.0,0.0)];
49 }
50
51 @end

viewController.m调用

 1 #import "ViewController.h"
 2 #import "UIButton+Service.h"
 3 @interface ViewController ()
 4
 5 @end
 6
 7 @implementation ViewController
 8
 9 - (void)viewDidLoad {
10     [super viewDidLoad];
11     self.view.backgroundColor = [UIColor whiteColor];
12
13     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
14     button.layer.borderWidth = 1.0;
15     button.layer.borderColor = [UIColor redColor].CGColor;
16     [button MyButtonWithFrame:CGRectMake(100, 200, 100, 100) textString:@"这是主题" subString:@"这是描述语句" imageUrl:@"2"];
17     [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
18     [self.view addSubview:button];
19 }
20
21
22 #pragma mark -- 自定义点击事件
23 - (void)buttonPressed:(UIButton *)sender{
24     NSLog(@"ss");
25 }
26
27 @end
时间: 2024-10-10 17:38:21

NSMutableAttributedString---UIButton封装-自带imageview&titlelabel的相关文章

封装后带超时的httpclient

nuget包里的.点我查看安装命令 参考自菜菜的这篇文章 public MainPage() { InitializeComponent(); method();//注意:如果2个method写在一个方法里面,调用的时候,2个方法走完才会加载数据,这样用户体验很不好 method1(); } private async void method() { var a = await AsyncCallbac1("http://www.baidu.com"); TbBlock.Text =

(一〇九)UIButton的使用技巧 -imageView、titleLabel、圆角等

UIButton是一个常用控件,使用方法十分基本,但是有很多技巧常常不被注意,本文主要介绍UIButton的一些较高级技巧,用于实现图片和标签显示的美观性等. 开发时常常碰到按钮的下侧或者右侧有标题的情况,如下图所示:   左侧的是上下结构,右侧的是左右结构,要实现这两种显示,有两种方法. [按钮的内部控件] 首先我们要了解按钮内部有imageView和titleLabel两个控件,按钮的内边距分为content(整体).title(标题).image(图片)三个,因此对于水平排布,可以通过内边

UIButton如何正确调整imageView及titleLabel的位置

    一些开发者知道通过imageEdgeInsets及titleEdgeInsets 可以调整imageView及titleLabel的位置,但不知道如何正确计算,基本上都是通过多次调整相应的值达到期望的目标(次数过多可能会失去信 心),究其原因就是不能正确理解imageEdgeInsets及titleEdgeInsets. 下面步入主题. 如果button的bounds足够大(宽度至少是imageView宽度与titleLabel宽度之和,高度至少为imageView高度与titleLab

AVPlayer封装的带缓存的视频播放器

使用AVPlayer封装实现了本地视频播放,以及边下边播在线视频,缓存完成后将视频保存在本地文件夹中,下次播放时直接从本地播放.并且实现了左右滑动快进快退视频.上下滑动调整音量,以及全屏功能. HcdCachePlayer 带缓存的播放器,使用AVPlayer封装开发. 简单介绍 HcdCacheVideoPlayer实现了边下边播在线视频,并且能将在线视频缓存在本地,支持左右滑动手势来调整视频播放进度,上下滑动手势调节音量大小,并且支持全屏播放.此控件使用了Masonry自动布局来实现全屏播放

将自己写的HDL代码封装成带AXI总线的IP

1.Tools->create and package IP 2.create AXI4总线的IP 3.新建block design 4.点击右键,选择edit in ip packager 此时生成了一个新的工程: 5.对生成的.v文件进行编辑 6.先修改顶层文件 添加一个LED输出端口 其实在文件的下面还可以添加自己的逻辑: 7.修改源文件 先添加端口,下面还有提示,编辑端口不要超过这条线.下面都是AXI总线的端口,不要去动它. 8.下一步操作 选择->Merge changes from

添加和移除事件处理兼容各浏览器的封装(带详细注释)

//事件处理兼容各种浏览器,采用能力检测方法,所谓能力检测,就是有能力就做,没有能力就不做 //定义一个处理事件的对象,兼容各种浏览器,dom2级事件处理和ie事件,如果这两个事件都不兼容,就采用dom0级处理 var eventUtil ={ addEvent:function(element,type,handler){ if (element.addEventListener) { //非IE浏览器采用dom2级事件处理,type为事件类型如:click,handler为事件处理函数,fa

封装一个带大小的封包,防止Tcp粘包、拆包

C++ 头文件 #ifndef TCPWRAP_H #define TCPWRAP_H #include <memory> #include <netinet/in.h> #include <string.h> #pragma pack(push,1) typedef struct { size_t length; //包头(包体长度) char* body; //包体 }Packet; #pragma pack(pop) class TcpDataWrap { pri

iOS学习-UIButton的imageView和titleLabel

UIButton的imageView和titleLabel的位置设置通过setImageEdgeInsets和setTitleEdgeInsets来设置 参考:http://blog.csdn.net/dfqin/article/details/37813591及http://blog.sina.com.cn/s/blog_5df876f301016h8h.html 实现如上图的效果其实有多种方法,像在button上嵌套label,imageView即可,下面是通过调节button自带的titl

自定义UIButton 实现图片和文字 之间距离和不同样式

1.UIButton+ImageTitleSpace.h #import <UIKit/UIKit.h> // 定义一个枚举(包含了四种类型的button) typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) { MKButtonEdgeInsetsStyleTop, // image在上,label在下 MKButtonEdgeInsetsStyleLeft, // image在左,label在右 MKButtonEdgeInsetsSt