简化富文本的使用
效果
说明
1. 如果不进行任何的封装,直接使用富文本会破坏可读性,代码可读性极差
2. 本例子提供了维护性较强的封装
3. 本人仅仅实现了两种富文本的实例(设置文本字体以及文本属性),剩下的可以参考本人的实现来进行扩展
* 4. 每一种富文本属性都应该抽象成一个类,而通过统一的接口进行管理(本例子中,仅仅实现了设置字体以及文本属性两个类)
源码
https://github.com/YouXianMing/StringAttribute
// // StringAttribute.h // AttributeString // // Created by YouXianMing on 15/8/3. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import "StringAttributeProtocol.h" @interface StringAttribute : NSObject <StringAttributeProtocol> /** * 富文本设置的生效范围 */ @property (nonatomic) NSRange effectRange; @end
// // StringAttribute.m // AttributeString // // Created by YouXianMing on 15/8/3. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "StringAttribute.h" @implementation StringAttribute - (NSString *)attributeName { return nil; } - (id)attributeValue { return nil; } - (NSRange)effectiveStringRange { return self.effectRange; } @end
// // StringAttributeProtocol.h // AttributeString // // Created by YouXianMing on 15/8/3. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> @protocol StringAttributeProtocol <NSObject> #pragma mark - 必须实现 @required /** * 属性名字 * * @return 属性名字 */ - (NSString *)attributeName; /** * 属性对应的值 * * @return 对应的值 */ - (id)attributeValue; @optional #pragma mark - 可选实现 /** * 属性设置生效范围 * * @return 生效的范围 */ - (NSRange)effectiveStringRange; @end
细节
结构图
抽象类的设计