学习了网上的一些CoreText知识之后,总结了一下学习成果,自定义了一个Label控件。
Label特点:
1、可以设置文本中某些字段为关键字;
2、可以设置文本颜色和其中关键字的颜色;
3、可以设置文本下划线样式和其中关键字下划线样式;
4、可以指定文本字体与大小和其中关键字的字体与大小;
5、可以响应关键字点击;
说明一下其中的关键类的意义:
CHLabel.h 自定义的控件,继承自UILabel;
TestViewController.h 是项目的根视图控制器,其中使用了CHLabel;
下面看代码:
CHLabel 代码实现:
#import <UIKit/UIKit.h>
#import<CoreText/CoreText.h>
typedef enum
{
kCHLabelUnderlineStyleNone = 0 ,
kCHLabelUnderlineStyleSingle ,
kCHLabelUnderlineStyleThick ,
kCHLabelUnderlineStyleDouble
} CHLabelUnderlineStyle;
@protocol CHLabelDelegate;
@interface CHLabel : UILabel
{
NSString *_textCH; //文本
UIColor *_textColorCH; //文本颜色
UIFont *_textFontCH; //文本字体
CHLabelUnderlineStyle _textUnderlineStyle; //文本下划线
NSString *_textKeyWordCH; //关键字
UIColor *_textKeyWordColorCH; //关键字颜色
UIFont *_keyWordFontCH; //关键字字体
CHLabelUnderlineStyle _keyWordUnderlineStyle;//关键字下划线
NSMutableArray *_keyWordsCH; //关键字数组
NSMutableAttributedString *_attributedString; //属性字符串
}
@property (nonatomic, copy) NSString *textCH;
@property (nonatomic, retain) UIColor *textColorCH;
@property (nonatomic, copy) NSString *textKeyWordCH;
@property (nonatomic, retain) UIColor *textKeyWordColorCH;
@property (nonatomic, retain) UIFont *textFontCH;
@property (nonatomic, retain) UIFont *keyWordFontCH;
@property (nonatomic, retain) NSMutableArray *keyWordsCH;
@property (nonatomic, retain) NSMutableAttributedString *attributedString;
@property (nonatomic, retain) id<CHLabelDelegate> delegate;
- (void) setText:(NSString *) textString andKeyWord:(NSString *) keyWord;
- (void) setTextColor:(UIColor *)textColor andKeyWordColor:(UIColor *) keyWordColor;
- (void) setTextFont: (UIFont *)textFont andKeyWordFont:(UIFont *) keyWordFont;
- (void) setTextUnderlineStyle: (CHLabelUnderlineStyle)textUnderlineStyle andKeyWordUnderlineStyle:(CHLabelUnderlineStyle) keyWordUnderlineStyle;
@end
@protocol CHLabelDelegate <NSObject>
@optional
- (void) CHLabel:(CHLabel *) chLabel tapOnKeyWord:(NSString *) keyWord;
@end
#import "CHLabel.h"
@implementation CHLabel
@synthesize textCH = _textCH;
@synthesize textColorCH = _textColorCH;
@synthesize textKeyWordCH = _textKeyWordCH;
@synthesize textKeyWordColorCH = _textKeyWordColorCH;
@synthesize textFontCH = _textFontCH;
@synthesize keyWordFontCH = _keyWordFontCH;
@synthesize keyWordsCH = _keyWordsCH;
@synthesize attributedString = _attributedString;
@synthesize delegate;
void safeRelease(id pointer)
{
if (!pointer)
{
[pointer release];
pointer = nil;
}
}
- (void) dealloc
{
safeRelease(_textCH);
safeRelease(_textColorCH);
safeRelease(_textKeyWordCH);
safeRelease(_textK