简化富文本的使用
效果
说明
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
细节
结构图
抽象类的设计