NSTextContainer、NSLayoutManager、NSTextStorage
jest nowy iOS7:
1) NSTextContainer:
klasie NSTextContainer definiuje region, w którym tekst jest rozplanowany. Obiekt NSTextContainer definiuje rejony prostokątne i można zdefiniować ścieżki wykluczeń wewnątrz linii tekstowej textcontainer rectanglesothattextsdalej na ścieżce do wykluczeńzasilania.
2) NSLayoutManager:
NSLayoutManager obiekt koordynuje układ i wyświetlanie znaków przechowywanych w obiekcie NSTextStorage. Mapuje kody znaków Unicode na glify, ustawia glify w serii obiektów NSTextContainer i wyświetla je w serii obiektów widoku tekstowego.
3) NSTextStorage:
NSTextStorage jest semiconcrete podklasa NSMutableAttributedString który zarządza zestaw NSLayoutManagerobjects klienta, notifyingthemofanychangestoitscharactersorattributessothattheycanrelay i ponownie wyświetlić tekst w razie potrzeby.
Mogliśmy wiedzieć NSTextStorage
można przechowywać i zarządzać UITextView
„s tekst, a to jest NSMutableAttributedString
” s subclass.We można dodać lub zmodyfikować atrybuty, więc jest to dobry wybór, aby przechowywać i zarządzać UITextView
„s tekst.
NSLayoutManager
służy do zarządzania zawartością układu NSTextStorage
.
NSTextContainer
zapewniają prostokąt do przechowywania tekstu w układzie.
Możemy po prostu z nich korzystać:
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];
Po pierwsze to zrobić wystąpienie z nich, a także tworzyć thier relationship.You należy dodać NSTextContainer
w UITextView
przez initWithFrame:textContainer:
metody.
// 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];
Jeśli chcesz użyć UITextStorage
zmienić atrybuty tekstu, można użyć:
[_textStorage beginEditing]; // begin edit
[_textStorage endEditing]; // end edit
między nimi można edytować tekst, takie jak:
[_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];
lub zmieniać kolor:
[_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];
Znalazłeś więcej informacji w tej sprawie? – dannyzlo
@DannyZlobinsky Niezupełnie. Otrzymano odpowiedź od użytkownika o wysokiej reputacji, ale został usunięty (?!). Wciąż czekam na dobre odpowiedzi. – drasto
Oto dobry film instruktażowy, w którym przedstawiono zasady NSTextStorage. Mam nadzieję, że może ci pomóc coś, co tam jest, ale wygląda ciekawie: https://www.youtube.com/watch?v=y7trOFDGVwA – juanmajmjr