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");
}
Другие вопросы по тегам