zoukankan      html  css  js  c++  java
  • 简化富文本的使用

    简化富文本的使用

    效果

    说明

    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

    细节

    结构图

    抽象类的设计

  • 相关阅读:
    WEB 3D SVG CAD 向量 几个实施(转)
    Dos.Common
    dos.orm
    php程序员招聘
    python之禅
    Electron
    MongoDB主从复制
    OSG开发概览
    从1-100中隔5个数去掉一个数,最后去掉的哪个数(如果数过一遍了从前端接着开始)?
    django/python日志logging 的配置以及处理
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4728152.html
Copyright © 2011-2022 走看看