NSTextContainer、NSLayoutManager、NSTextStorage
ist neu für iOS7:
1) NSTextContainer:
Die NSTextContainer Klasse definiert einen Bereich, in dem Text ausgelegt. Ein NSTextContainer-Objekt definiert rechteckige Bereiche, und Sie können Ausschlusspfade innerhalb der umschließenden Rechtecke des Textcontainers definieren, um die Textflüsse um den ausgeschlossenen Bereich herum zu verbergen.
2) NSLayoutManager:
Ein NSLayoutManager Objektkoordinaten, das Layout und die Anzeige von in einem Objekt gehalten NSTextStorage Zeichen. Es ordnet Unicode-Zeichencodes Glyphen zu, legt die Glyphen in einer Reihe von NSTextContainer-Objekten fest und zeigt sie in einer Reihe von Textansichtsobjekten an.
3) NSTextStorage:
NSTextStorage ist eine Unterklasse von semiconcrete NSMutableAttributedString, die einen Satz von Client-NSLayoutManagerobjects, notifyingthemofanychangestoitscharactersorattributessothattheycanrelay und erneut anzuzeigen, den Text schafft je nach Bedarf.
Wir könnten wissen NSTextStorage
speichern und verwalten UITextView
‚s Text, und es ist NSMutableAttributedString
‘ s subclass.We kann die Attribute hinzufügen oder ändern, so dass es eine gute Wahl UITextView
‚s Text zu speichern und zu verwalten.
NSLayoutManager
verwenden Sie für den Inhalt von NSTextStorage
Layout verwalten.
NSTextContainer
Geben Sie ein Rechteck zum Speichern des Layouttexts ein.
Wir können sie einfach nutzen:
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];
Erstens ist Instanz von ihnen machen, und erstellen thier relationship.You NSTextContainer
in UITextView
von initWithFrame:textContainer:
Methode hinzufügen.
// 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];
Wenn UITextStorage
verwenden möchten Text Attribute zu ändern, können Sie verwenden:
[_textStorage beginEditing]; // begin edit
[_textStorage endEditing]; // end edit
Zwischen ihnen können Sie Text bearbeiten, wie zB:
[_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];
oder die Farbe ändern:
[_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];
Haben Sie weitere Informationen gefunden? dazu? – dannyzlo
@DannyZlobinsky Nicht wirklich. Es gab eine Antwort von hoher Reputation Benutzer, aber aparently wurde gelöscht (?!). Ich warte immer noch auf gute Antworten. – drasto
Hier ein gutes Video-Tutorial, wo NSTextStorage Prinzipien zeigt. Ich hoffe, es könnte dir etwas helfen, das da ist, aber es sieht interessant aus: https://www.youtube.com/watch?v=y7trOFDGVwA – juanmajmjr