UITextView はその NSLayoutManager を公開し、テキストの編集時にクライアントがカスタム スタイルを追加できるようにします (たとえば、この記事では構文の強調表示を使用して UITextView を実装しています: http://www.objc.io/issue-5/getting-to-know-textkit.html ) 。
UITextField の基礎となる NSLayoutManager を取得して、同様のカスタマイズを可能にする方法はありますか?
UITextView はその NSLayoutManager を公開し、テキストの編集時にクライアントがカスタム スタイルを追加できるようにします (たとえば、この記事では構文の強調表示を使用して UITextView を実装しています: http://www.objc.io/issue-5/getting-to-know-textkit.html ) 。
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 に適用します。優れたパフォーマンスとさまざまな言語のサポート。