2016-01-14 2 views
0

Интересно, почему мой делегат метод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 свойства сильно сохраняется в классе, но метод делегата не называется!!!

ответ

0

Метод делегата будет вызываться, когда вы измените 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"); 
} 
0

Я обнаружил, что метод делегата также вызывается, когда вы добавляете любой контейнер UITextView.

Смежные вопросы