參考文章
源碼
import Foundation
@objc protocol AttributeStringProtocol {
/**
富文本屬性名稱
- returns: 屬性名稱
*/
func attributeName() -> NSString
/**
屬性對應(yīng)的值
- returns: 對應(yīng)的值
*/
func attributeValue() -> AnyObject
/**
屬性設(shè)置生效范圍
- returns: 生效范圍
*/
optional func effectiveRange() -> NSRange
}
import Foundation
extension NSMutableAttributedString {
/**
添加富文本對象
- parameter stringAttribute: 實現(xiàn)了AttributeStringProtocol協(xié)議的對象
*/
func addStringAttribute(stringAttribute : AttributeStringProtocol) {
self.addAttribute(stringAttribute.attributeName() as String,
value: stringAttribute.attributeValue(),
range: stringAttribute.effectiveRange!())
}
/**
刪除指定的富文本對象
- parameter stringAttribute: 實現(xiàn)了AttributeStringProtocol協(xié)議的對象
*/
func removeStringAttribute(stringAttribute : AttributeStringProtocol) {
self.removeAttribute(stringAttribute.attributeName() as String,
range: stringAttribute.effectiveRange!())
}
}
import UIKit
class StringAttribute: NSObject, AttributeStringProtocol {
// 富文本的生效范圍
var m_effectRange : NSRange! = NSMakeRange(0, 0)
// MARK: AttributeStringProtocol
func attributeName() -> NSString {
fatalError("It have to be overwritten by subclass !")
}
func attributeValue() -> AnyObject {
fatalError("It have to be overwritten by subclass !")
}
func effectiveRange() -> NSRange {
return m_effectRange
}
}
分析
分析1.png
分析2.png