的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