简化富文本的使用

简化富文本的使用

效果

说明

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

细节

结构图

抽象类的设计

原文地址:https://www.cnblogs.com/YouXianMing/p/4728152.html