2014-06-08 27 views

回答

-1

您可以通过textView.layoutManager访问布局管理器。您可以自己创建的所有对象指定自己的布局管理器:

NSTextStorage* textStorage = [[NSTextStorage alloc] initWithString:string]; 

// you could create a subclass of NSLayoutManager here 
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init]; 
[textStorage addLayoutManager:layoutManager]; 

self.textContainer = [[NSTextContainer alloc] initWithSize:self.view.bounds.size]; 
[layoutManager addTextContainer:self.textContainer]; 

UITextView* textView = [[UITextView alloc] initWithFrame:self.view.bounds textContainer:self.textContainer]; 
[self.view addSubview:textView]; 

但是,如果你正在试图做的语法高亮,是不是我会采取的做法。我建议继承UITextView检测用户所做的更改,并通过[self.storage addAttributes:range:]

它可能不会是很困难的端口该类我从OS X写至iOS添加自己的语法,在这一点上强调:https://github.com/abhibeckert/Dux/blob/master/Dux/DuxSyntaxHighlighter.m - 它适用语法突出显示到NSTextStorage,具有良好的性能和对各种语言的支持。

+1

这是没有问题的。问题是,是否可以访问UITextField的layoutManager。 – ldoogy

0

由于各种原因,Apple不会公开layoutManager的UILabel。我听说这样做的原因是它实际上是在多个标签之间共享的,因为您不编辑标签文本,而只是不经常布置,就像边界发生变化时一样。

但你可以有UILabel使用自定义TextKit叠加,就像我在这里展示:https://www.cocoanetics.com/2015/03/customizing-uilabel-hyperlinks/