NSTextContainer、NSLayoutManager、NSTextStorage
是新的iOS7:
1)NSTextContainer:
的NSTextContainer類定義,其中文本被佈置的區域。 NSTextContainer對象定義了矩形區域,您可以在textcontainer的boundingrectangle中定義排除路徑,並在排除的殘留文件流中定義排除路徑。
2)NSLayoutManager:
一種NSLayoutManager物體座標在NSTextStorage對象保持的字符的佈局和顯示。它將Unicode字符代碼映射爲字形,將字形設置爲一系列NSTextContainer對象,並將它們顯示在一系列文本視圖對象中。
3)NSTextStorage:
NSTextStorage是NSMutableAttributedString的semiconcrete類,用於管理一組客戶NSLayoutManagerobjects,notifyingthemofanychangestoitscharactersorattributessothattheycanrelay的,並根據需要重新顯示的文本。
我們可以知道NSTextStorage
可以存儲和管理UITextView
的文本,它是NSMutableAttributedString
的subclass.We可以添加或修改屬性,所以它是一個不錯的選擇,存儲和管理UITextView
的文本。
NSLayoutManager
用於管理NSTextStorage
的佈局內容。
NSTextContainer
提供了一個矩形來隱藏佈局文本。
我們可以簡單地使用它們:
CGRect textViewRect = CGRectInset(self.view.bounds, 10.0, 20.0);
// NSTextContainer
NSTextContainer *container = [[NSTextContainer alloc] initWithSize:CGSizeMake(textViewRect.size.width, CGFLOAT_MAX)]; // new in iOS 7.0
container.widthTracksTextView = YES; // Controls whether the receiveradjusts the width of its bounding rectangle when its text view is resized
// NSLayoutManager
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init]; // new in iOS 7.0
[layoutManager addTextContainer:container];
// NSTextStorage subclass
self.textStorage = [[TextStorage alloc] init]; // new in iOS 7.0
[self.textStorage addLayoutManager:layoutManager];
首先是使他們的情況下,創造thier relationship.You必須initWithFrame:textContainer:
方法UITextView
添加NSTextContainer
。
// UITextView
UITextView *newTextView = [[UITextView alloc] initWithFrame:textViewRect textContainer:container];
newTextView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
newTextView.scrollEnabled = YES;
newTextView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
// newTextView.editable = NO;
newTextView.font = [UIFont fontWithName:self.textStorage.fontName size:18.0];
newTextView.dataDetectorTypes = UIDataDetectorTypeAll;
self.textView = newTextView;
[self.view addSubview:self.textView];
如果想使用UITextStorage
改變文本的屬性,你可以使用:
[_textStorage beginEditing]; // begin edit
[_textStorage endEditing]; // end edit
它們之間可以編輯的文字,如:
[_textStorage beginEditing];
NSDictionary *attrsDic = @{NSTextEffectAttributeName: NSTextEffectLetterpressStyle};
UIKIT_EXTERN NSString *const NSTextEffectAttributeName NS_AVAILABLE_IOS(7_0); // NSString, default nil: no text effect
NSMutableAttributedString *mutableAttrString = [[NSMutableAttributedString alloc] initWithString:@"Letterpress" attributes:attrsDic];
NSAttributedString *appendAttrString = [[NSAttributedString alloc] initWithString:@" Append:Letterpress"];
[mutableAttrString appendAttributedString:appendAttrString];
[_textStorage setAttributedString:mutableAttrString];
[_textStorage endEditing];
或改變顏色:
[_textStorage beginEditing];
/* Dynamic Coloring Text */
self.textStorage.bookItem = [[BookItem alloc] initWithBookName:@"Dynamic Coloring.rtf"];
self.textStorage.tokens = @{@"Alice": @{NSForegroundColorAttributeName: [UIColor redColor]},
@"Rabbit": @{NSForegroundColorAttributeName: [UIColor greenColor]},
DefaultTokenName: @{NSForegroundColorAttributeName: [UIColor blackColor]}
};
[_textStorage setAttributedString:_textStorage.bookItem.content];
[_textStorage endEditing];
您是否找到更多信息在這個? – dannyzlo
@DannyZlobinsky不是。從高聲譽的用戶那裏得到了答案,但是卻被刪除了(?!)。我仍然在等待一些好的答案。 – drasto
這裏有一個很好的視頻教程,其中顯示了NSTextStorage原則。我希望它能幫助你,但它看起來很有趣: https://www.youtube.com/watch?v=y7trOFDGVwA – juanmajmjr