2014-06-08 66 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/