UILabel 扩展NSTextAlignment

UILabel 扩展NSTextAlignment,第1张

首先要了解UILabel的用来设置和显示内部文本的方法,只需根据textAlignment的值,来动态的修改textRect的位置来达到目的(下面是UILabel需要重写的两个主要方法)

使用起来最简单的方式就是为UILabel写个分类,这就需要runtime的一些知识(通过类别实现的关键就是要通过自定的方法与UILabel中的方法进行交换,来达到方法的override效果)

下面是对UILbel分类具体的实现

举个例子,有个titleLabel,产品要求title最多显示两行,但是不管显示几行都要内容的上端起点都一样。这样你设置一个大Label,把textAline改为我扩展的leftTopAline就OK了。

日常开发过程中我们经常碰到要给分类添加自定义属性和变量的,下面通过关联对象给分类添加属性,也是runtime的实际应用之一,非常实用。(关于runtime的使用还有很多,这里只简单记录一下利用runtime给分类添加属性)。

关联Runtime提供了下面几个接口:

void objc_setAssociatedObject(id object, const void * key, id value, objc_AssociationPolicy policy)

id objc_getAssociatedObject(id object, const void * key)

void objc_removeAssociatedObjects(id object)

id object被关联的对象

const void * key:关联的key,要求唯一

id value:关联的对象

objc_AssociationPolicy policy:内存管理策略

1.给UILabel添加一个 竖直方向的verticalText,如下图所示:

新建一个继承UILabel的Category,并添加一个成员变量

.h文件

m.文件

调用时就直接使用点语法:

_textLabel.verticalText = @"厉害了,我的国"

2.给UIButton添加一个扩大点击区域的实例方法

新建一个继承UIButton的Category,并添加一个实例方法

.h文件

.m文件

创建button并调用:

[button setTouchExpandEdgeWithTop:30 right:30 bottom:30 left:30]

点击button的上下左右各30pt,button也会有响应。

Demo链接

在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel 使用不同的颜色或不同的字体来体现字符串,在iOS 6 以后我们可以很轻松的实现这一点,官方的API 为我们提供了UILabel类的attributedText, 使用不同颜色和不同字体的字符串,我们可以使用NSAttributedText 和 NSMutableAttributedText 类来实现。

现实代码:

@interface ViewController : UIViewController

@property (nonatomic, strong) IBOutlet UILabel *attrLabel

- (IBAction)next:(id)sender

@end

.m文件 在viewDidLoad方法中添加以下代码:

self.title = @"For iOS 6 &later"

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"Using NSAttributed String"]

[str addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0,5)]

[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(6,12)]

[str addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(19,6)]

[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Arial-BoldItalicMT" size:30.0] range:NSMakeRange(0, 5)]

[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:30.0] range:NSMakeRange(6, 12)]

[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Courier-BoldOblique" size:30.0] range:NSMakeRange(19, 6)]

attrLabel.attributedText = str

如果想在iOS6.0以前版本实现这个效果,需要使用到一个第三方库TTTAttributedLabel,同时还有导入CoreText.frame框架.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11457209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存