2016-01-14 59 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和佈局管理屬性強留在類,但委託方法不所謂!

回答

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也叫。