的UITextView公开其NSLayoutManager,允许客户为编辑文本添加自定义样式(如本文中实现语法高亮一个UITextView:http://www.objc.io/issue-5/getting-to-know-textkit.html)是否有一种方式来获得进入布局管理器对UITextField
有一种获取UITextField底层NSLayoutManager以允许类似定制的方法?
的UITextView公开其NSLayoutManager,允许客户为编辑文本添加自定义样式(如本文中实现语法高亮一个UITextView:http://www.objc.io/issue-5/getting-to-know-textkit.html)是否有一种方式来获得进入布局管理器对UITextField
有一种获取UITextField底层NSLayoutManager以允许类似定制的方法?
您可以通过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,具有良好的性能和对各种语言的支持。
由于各种原因,Apple不会公开layoutManager的UILabel
。我听说这样做的原因是它实际上是在多个标签之间共享的,因为您不编辑标签文本,而只是不经常布置,就像边界发生变化时一样。
但你可以有UILabel
使用自定义TextKit叠加,就像我在这里展示:https://www.cocoanetics.com/2015/03/customizing-uilabel-hyperlinks/
这是没有问题的。问题是,是否可以访问UITextField的layoutManager。 – ldoogy