NSLayoutManager Делегат не вызван
Интересно, почему мой метод делегата
- (void)layoutManager:(NSLayoutManager *)layoutManager
didCompleteLayoutForTextContainer:(NSTextContainer *)textContainer
atEnd:(BOOL)layoutFinishedFlag
не называется, я использовал этот код:
self.storage = [[NSTextStorage alloc] initWithString:@"sdfsdf sdf sdf sdf sdf sdf Sdf sdf sdf "];
self.layout = [[NSLayoutManager alloc] init];
[self.storage addLayoutManager:self.layout];
self.layout.delegate = self;
NSTextContainer * container = [[NSTextContainer alloc] init];
[self.layout addTextContainer:container];
Свойства TextStorage и LayoutManager прочно сохраняются в классе, но метод делегата не вызывается!!!
2 ответа
Я обнаружил, что метод делегата также вызывается при добавлении любого контейнера в UITextView.
Метод делегата будет вызван при изменении NSTextStorage после установки делегата. Это фрагмент из UIViewController:
- (void)viewDidLoad {
[super viewDidLoad];
self.layout = [[NSLayoutManager alloc] init];
self.layout.delegate = self;
self.storage = [[NSTextStorage alloc] init];
[self.storage addLayoutManager:self.layout];
NSTextContainer * container = [[NSTextContainer alloc] init];
[self.layout addTextContainer:container];
NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"New string"];
[self.storage setAttributedString:string];
}
- (void)layoutManager:(NSLayoutManager *)layoutManager
didCompleteLayoutForTextContainer:(NSTextContainer *)textContainer
atEnd:(BOOL)layoutFinishedFlag
{
NSLog(@"I'm here");
}