iOS NSAttributedString(属性字符串)
来源:互联网 发布:淘宝公司介绍怎么写 编辑:程序博客网 时间:2024/05/22 06:37
NSAttributedString实际上就是一个字符串和一本字典。
字典包含每一个字符的属性:包括字体、大小、下划线、颜色等等。
关键是要知道字典中每个key的含义以及相应value的取值范围
Character Attributes(重点)
NSString *const NSFontAttributeName ; // 设置字体,UIFont对象,默认12-point Helvetica(Neue)NSString *const NSParagraphStyleAttributeName ; // (重要)设置段落风格,NSParagraphStyle对象,默认是[NSParagraphStyle defaultParagraphStyle],这里可以设置很多段落格式,首行缩进之类的NSString *const NSForegroundColorAttributeName ; // 字体颜色,UIColor对象,默认黑色NSString *const NSBackgroundColorAttributeName ; // 背景色,UIColor对象,默认透明NSString *const NSLigatureAttributeName ; // <span style="color:#FF0000;">(********)不知道干嘛用</span>NSString *const NSKernAttributeName ; // 字符间距,NSNumber 浮点数,默认为0NSString *const NSStrikethroughStyleAttributeName ; // 删除线的线粗,NSNumber 整数,默认是NSUnderlineStyleNone(你真的没看错)NSString *const NSUnderlineStyleAttributeName ; // 下划线的线粗,NSNumber 整数,默认同上,还有别的样式,例如双下划线NSString *const NSStrokeColorAttributeName ; // 描边颜色,UIColor对象,默认同字体颜色NSString *const NSStrokeWidthAttributeName ; // 描边,NSNumber 浮点数,正值表示镂空描边,负值标志填充描边,值表示描边线粗NSString *const NSShadowAttributeName ; // 阴影,NSShadow对象,效果参照最后的图片NSString *const NSTextEffectAttributeName ; // 文本风格,NSSting对象,默认为nil,官方举例NSTextEffectLetterpressStyle,其实也就只有这个风格。。。感觉有跟没有差不多NSString *const NSAttachmentAttributeName ; // <span style="color:#FF0000;">(********)文本附件属性</span>, NSTextAttachment对象,其中包含有图片,等我找到典型案例再回来重新介绍NSString *const NSLinkAttributeName ; // 链接某个地址,NSURL(推荐)或NSString对象,默认为nil不指定任何链接。这里有详细介绍,http://blog.csdn.net/reylen/article/details/18958995NSString *const NSBaselineOffsetAttributeName ; // 基线偏移量,NSNumber 浮点数,可以上下微调字体的位置。(适合那些返回位置信息不正确的字体)NSString *const NSUnderlineColorAttributeName ; // 下划线颜色NSString *const NSStrikethroughColorAttributeName ; // 删除线颜色NSString *const NSObliquenessAttributeName ; // 斜体,NSNumber 浮点数,默认0,数值表示倾斜度NSString *const NSExpansionAttributeName ; // 水平拉伸,NSNumber 浮点数,默认0,水平拉伸字体,高度不变。NSString *const NSWritingDirectionAttributeName ; // <span style="color:#FF0000;">(********)</span>书写方向,NSArray NSNumber(而且只能是整数0,1,2,3),没看到什么效果,找到案例再来更新NSString *const NSVerticalGlyphFormAttributeName; // 水平或垂直显示,NSNumber(只有0:水平和1:垂直),没看到效果。。。
Text Writing Direction
用于"NSWritingDirectionAttributeName"
typedef enum : NSInteger { NSTextWritingDirectionEmbedding = (0 << 1), NSTextWritingDirectionOverride = (1 << 1)} NSTextWritingDirection;
Text Effect Attribute
用于"NSTextEffectAttributeName"
NSString *const NSTextEffectLetterpressStyle;
Underline and Strikethrough Style Attributes
用于"NSUnderlineStyleAttributeName"和"NSStrikethroughStyleAttributeName"
typedef enum : NSInteger { NSUnderlineStyleNone = 0x00 , NSUnderlineStyleSingle = 0x01 , NSUnderlineStyleThick = 0x02 , NSUnderlineStyleDouble = 0x09 , NSUnderlinePatternSolid = 0x0000 , NSUnderlinePatternDot = 0x0100 , NSUnderlinePatternDash = 0x0200 , NSUnderlinePatternDashDot = 0x0300 , NSUnderlinePatternDashDotDot = 0x0400 , NSUnderlineByWord = 0x8000 } NSUnderlineStyle;
String Drawing Options
enum { NSStringDrawingTruncatesLastVisibleLine = 1 << 5, NSStringDrawingUsesLineFragmentOrigin = 1 << 0, NSStringDrawingUsesFontLeading = 1 << 1, NSStringDrawingUsesDeviceMetrics = 1 << 3,};typedef NSInteger NSStringDrawingOptions;
Document Types
NSString *NSPlainTextDocumentType;NSString *NSRTFTextDocumentType;NSString *NSRTFDTextDocumentType;NSString *NSHTMLTextDocumentType;
Keys for Options and Document Attributes Dictionaries
NSString *const NSDocumentTypeDocumentAttribute ;NSString *const NSCharacterEncodingDocumentAttribute ;NSString *const NSDefaultAttributesDocumentAttribute ;NSString *const NSPaperSizeDocumentAttribute ;NSString *const NSPaperMarginDocumentAttribute ;NSString *const NSViewSizeDocumentAttribute ;NSString *const NSViewZoomDocumentAttribute ;NSString *const NSViewModeDocumentAttribute ;NSString *const NSReadOnlyDocumentAttribute ;NSString *const NSBackgroundColorDocumentAttribute ;NSString *const NSHyphenationFactorDocumentAttribute ;NSString *const NSDefaultTabIntervalDocumentAttribute ;NSString *const NSTextLayoutSectionsAttribute;
Text Layout Sections Attribute
NSString *NSTextLayoutSectionOrientation;NSString *NSTextLayoutSectionRange;
NSString的属性常量,貌似部分可以用在Character Attributes里面
UILineBreakMode已由NSLineBreakMode代替。Keys for Text Attributes Dictionaries已在ios 7中被抛弃。剩下以下三类常量可以使用。
NSTextAlignment:
enum { NSTextAlignmentLeft = 0, NSTextAlignmentCenter = 1, NSTextAlignmentRight = 2, NSTextAlignmentJustified = 3, // 两端对齐 NSTextAlignmentNatural = 4,};typedef NSInteger NSTextAlignment;
UIBaselineAdjustment:
用于"NSBaselineOffsetAttributeName"字符属性typedef enum { UIBaselineAdjustmentAlignBaselines , // 根据文字的baseLine调整 UIBaselineAdjustmentAlignCenters , // 根据框的水平中心线调整 UIBaselineAdjustmentNone , // 以左上角为基准,默认对齐方式} UIBaselineAdjustment;
NSWritingDirection:
enum { NSWritingDirectionNatural = -1, // Use the Unicode Bidi algorithm rules P2 and P3 to determine which direction to use. NSWritingDirectionLeftToRight = 0, // 从左到右 NSWritingDirectionRightToLeft = 1 // 从右到左};
------------------------------------------------------------------------------------------------------------------------------------------------------------------
UITextViewDelegate调用流程:
1.点击TextView内部,出现光标前。
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;
如果返回NO,则不会进入编辑,不会出现光标,也不会调用textViewDidBeginEditing:方法。
当选定点选字符串中其他位置,还是会调用didChangeSelection方法
2.出现光标后
- (void)textViewDidBeginEditing:(UITextView *)textView;3.移动光标或选定某些字符串
- (void)textViewDidChangeSelection:(UITextView *)textView;
4.添加、删除一个字符
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;<pre name="code" class="objc">- (void)textViewDidChangeSelection:(UITextView *)textView;
- (void)textViewDidChange:(UITextView *)textView;
如果第1个方法返回NO,不会调用下面两个方法。
5.不知道怎么结束编辑。。。先留着。(***)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
附类定义
UITextView
NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextView : UIScrollView <UITextInput>@property(nonatomic,assign) id<UITextViewDelegate> delegate; // 代理@property(nonatomic,copy) NSString *text;@property(nonatomic,retain) UIFont *font;@property(nonatomic,retain) UIColor *textColor;@property(nonatomic) NSTextAlignment textAlignment; // default is NSLeftTextAlignment@property(nonatomic) NSRange selectedRange;@property(nonatomic,getter=isEditable) BOOL editable;@property(nonatomic,getter=isSelectable) BOOL selectable NS_AVAILABLE_IOS(7_0); // toggle selectability, which controls the ability of the user to select content and interact with URLs & attachments@property(nonatomic) UIDataDetectorTypes dataDetectorTypes NS_AVAILABLE_IOS(3_0);@property(nonatomic) BOOL allowsEditingTextAttributes NS_AVAILABLE_IOS(6_0); // defaults to NO@property(nonatomic,copy) NSAttributedString *attributedText NS_AVAILABLE_IOS(6_0); // default is nil@property(nonatomic,copy) NSDictionary *typingAttributes NS_AVAILABLE_IOS(6_0); // automatically resets when the selection changes- (void)scrollRangeToVisible:(NSRange)range;// Presented when object becomes first responder. If set to nil, reverts to following responder chain. If// set while first responder, will not take effect until reloadInputViews is called.@property (readwrite, retain) UIView *inputView; @property (readwrite, retain) UIView *inputAccessoryView;@property(nonatomic) BOOL clearsOnInsertion NS_AVAILABLE_IOS(6_0); // defaults to NO. if YES, the selection UI is hidden, and inserting text will replace the contents of the field. changing the selection will automatically set this to NO.// Create a new text view with the specified text container (can be nil) - this is the new designated initializer for this class- (instancetype)initWithFrame:(CGRect)frame textContainer:(NSTextContainer *)textContainer NS_AVAILABLE_IOS(7_0);// Get the text container for the text view@property(nonatomic,readonly) NSTextContainer *textContainer NS_AVAILABLE_IOS(7_0);// Inset the text container's layout area within the text view's content area@property(nonatomic, assign) UIEdgeInsets textContainerInset NS_AVAILABLE_IOS(7_0);// Convenience accessors (access through the text container)@property(nonatomic,readonly) NSLayoutManager *layoutManager NS_AVAILABLE_IOS(7_0);@property(nonatomic,readonly,retain) NSTextStorage *textStorage NS_AVAILABLE_IOS(7_0);// Style for links@property(nonatomic, copy) NSDictionary *linkTextAttributes NS_AVAILABLE_IOS(7_0);@endUIKIT_EXTERN NSString * const UITextViewTextDidBeginEditingNotification;UIKIT_EXTERN NSString * const UITextViewTextDidChangeNotification;UIKIT_EXTERN NSString * const UITextViewTextDidEndEditingNotification;
NSAttributedString
@interface NSAttributedString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>@property (readonly, copy) NSString *string;- (NSDictionary *)attributesAtIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;@end@interface NSAttributedString (NSExtendedAttributedString)@property (readonly) NSUInteger length;- (id)attribute:(NSString *)attrName atIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;- (NSAttributedString *)attributedSubstringFromRange:(NSRange)range;- (NSDictionary *)attributesAtIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;- (id)attribute:(NSString *)attrName atIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;- (BOOL)isEqualToAttributedString:(NSAttributedString *)other;- (instancetype)initWithString:(NSString *)str;- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;- (instancetype)initWithAttributedString:(NSAttributedString *)attrStr;typedef NS_OPTIONS(NSUInteger, NSAttributedStringEnumerationOptions) { NSAttributedStringEnumerationReverse = (1UL << 1), NSAttributedStringEnumerationLongestEffectiveRangeNotRequired = (1UL << 20)};- (void)enumerateAttributesInRange:(NSRange)enumerationRange options:(NSAttributedStringEnumerationOptions)opts usingBlock:(void (^)(NSDictionary *attrs, NSRange range, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);- (void)enumerateAttribute:(NSString *)attrName inRange:(NSRange)enumerationRange options:(NSAttributedStringEnumerationOptions)opts usingBlock:(void (^)(id value, NSRange range, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);@endNS_CLASS_AVAILABLE(10_0, 3_2)@interface NSMutableAttributedString : NSAttributedString- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)str;- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;@end@interface NSMutableAttributedString (NSExtendedMutableAttributedString)@property (readonly, retain) NSMutableString *mutableString;- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;- (void)removeAttribute:(NSString *)name range:(NSRange)range;- (void)replaceCharactersInRange:(NSRange)range withAttributedString:(NSAttributedString *)attrString;- (void)insertAttributedString:(NSAttributedString *)attrString atIndex:(NSUInteger)loc;- (void)appendAttributedString:(NSAttributedString *)attrString;- (void)deleteCharactersInRange:(NSRange)range;- (void)setAttributedString:(NSAttributedString *)attrString;- (void)beginEditing;- (void)endEditing;@end
代理协议UITextViewDelegate
@protocol UITextViewDelegate <NSObject, UIScrollViewDelegate>@optional- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;- (BOOL)textViewShouldEndEditing:(UITextView *)textView;- (void)textViewDidBeginEditing:(UITextView *)textView;- (void)textViewDidEndEditing:(UITextView *)textView;- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;- (void)textViewDidChange:(UITextView *)textView;- (void)textViewDidChangeSelection:(UITextView *)textView;- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange NS_AVAILABLE_IOS(7_0);- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange NS_AVAILABLE_IOS(7_0);@end
NSShadow
NS_CLASS_AVAILABLE_IOS(6_0) @interface NSShadow : NSObject <NSCopying, NSCoding>@property (nonatomic, assign) CGSize shadowOffset; // 影子与字符串的偏移量@property (nonatomic, assign) CGFloat shadowBlurRadius; // 影子的模糊程度@property (nonatomic, retain) id shadowColor; // 影子的颜色@end
shadow属性的效果
NSShadow *shadow = [[NSShadow alloc]init]; shadow.shadowOffset = CGSizeMake(5, 5); // 影子偏移量 shadow.shadowColor = [UIColor blueColor]; // 影子颜色 shadow.shadowBlurRadius = 20.0; // 模糊程度 NSDictionary *dict = @{ NSFontAttributeName:[UIFont fontWithName:@"Marion-Italic" size:50.0], NSShadowAttributeName:shadow, NSKernAttributeName:@(2) }; textView.attributedText = [[NSAttributedString alloc]initWithString:@"中文究竟是\nEnglishReally" attributes:dict];
功能太强大,一天总结不完。以后用到再上来补充。
如果你有一些iOS文字处理的问题,欢迎评论交流。
- iOS NSAttributedString(属性字符串)
- iOS-属性字符串NSAttributedString
- iOS - NSAttributedString字符串属性详解
- NSAttributedString 详解(属性字符串)
- NSAttributedString字符串属性
- iOS-NSAttributedString属性关键字
- 属性字符串NSAttributedString简易教程
- Objective-C属性字符串NSAttributedString
- iOS 字符属性NSAttributedString描述
- iOS 字符属性NSAttributedString描述
- iOS 字符属性NSAttributedString描述
- iOS 字符属性NSAttributedString描述
- iOS 字符属性NSAttributedString描述
- iOS 字符属性NSAttributedString描述
- iOS 字符属性NSAttributedString描述
- iOS 字符属性NSAttributedString描述
- iOS之NSAttributedString属性值
- UIKit 带属性的字符串 NSAttributedString、NSMutableAttributedString、NSTextStorge(未完成)
- perl-printf 函数
- uboot——start_armboot——init_sequence——board_init
- 计算机网络管理第四章习题
- 菜鸟学习vware
- Codeforces Round #277 (Div. 2) D题 树形dp
- iOS NSAttributedString(属性字符串)
- tortoise svn(小乌龟)入门
- POJ-1422-Air Raid 解题报告
- Jquery 获取 radio选中值
- 中位数
- 在linux下怎么安装.bin的文件。
- ip helper-address命令工作过程
- 基于TINY4412的Andorid开发-------简单的LED灯控制
- 软件开发质量管理层次模型